projects
/
fio.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Suppress uninteresting data race reports
[fio.git]
/
init.c
diff --git
a/init.c
b/init.c
index 25661bef6e72fa3dadede80073d2dcef9eabd6ad..e47e5384119b369891119b54467ed558dfa082c3 100644
(file)
--- a/
init.c
+++ b/
init.c
@@
-12,6
+12,11
@@
#include <sys/types.h>
#include <sys/stat.h>
#include <dlfcn.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <dlfcn.h>
+#ifdef CONFIG_VALGRIND_DEV
+#include <valgrind/drd.h>
+#else
+#define DRD_IGNORE_VAR(x) do { } while (0)
+#endif
#include "fio.h"
#ifndef FIO_NO_HAVE_SHM_H
#include "fio.h"
#ifndef FIO_NO_HAVE_SHM_H
@@
-79,6
+84,7
@@
static int prev_group_jobs;
unsigned long fio_debug = 0;
unsigned int fio_debug_jobno = -1;
unsigned int *fio_debug_jobp = NULL;
unsigned long fio_debug = 0;
unsigned int fio_debug_jobno = -1;
unsigned int *fio_debug_jobp = NULL;
+unsigned int *fio_warned = NULL;
static char cmd_optstr[256];
static bool did_arg;
static char cmd_optstr[256];
static bool did_arg;
@@
-309,6
+315,7
@@
static void free_shm(void)
if (threads) {
flow_exit();
fio_debug_jobp = NULL;
if (threads) {
flow_exit();
fio_debug_jobp = NULL;
+ fio_warned = NULL;
free_threads_shm();
}
free_threads_shm();
}
@@
-331,6
+338,8
@@
static void free_shm(void)
*/
static int setup_thread_area(void)
{
*/
static int setup_thread_area(void)
{
+ int i;
+
if (threads)
return 0;
if (threads)
return 0;
@@
-341,7
+350,7
@@
static int setup_thread_area(void)
do {
size_t size = max_jobs * sizeof(struct thread_data);
do {
size_t size = max_jobs * sizeof(struct thread_data);
- size += sizeof(unsigned int);
+ size +=
2 *
sizeof(unsigned int);
#ifndef CONFIG_NO_SHM
shm_id = shmget(0, size, IPC_CREAT | 0600);
#ifndef CONFIG_NO_SHM
shm_id = shmget(0, size, IPC_CREAT | 0600);
@@
-374,8
+383,12
@@
static int setup_thread_area(void)
#endif
memset(threads, 0, max_jobs * sizeof(struct thread_data));
#endif
memset(threads, 0, max_jobs * sizeof(struct thread_data));
+ for (i = 0; i < max_jobs; i++)
+ DRD_IGNORE_VAR(threads[i]);
fio_debug_jobp = (unsigned int *)(threads + max_jobs);
*fio_debug_jobp = -1;
fio_debug_jobp = (unsigned int *)(threads + max_jobs);
*fio_debug_jobp = -1;
+ fio_warned = fio_debug_jobp + 1;
+ *fio_warned = 0;
flow_init();
flow_init();
@@
-1467,7
+1480,7
@@
static int add_job(struct thread_data *td, const char *jobname, int job_add_num,
f->real_file_size = -1ULL;
}
f->real_file_size = -1ULL;
}
- td->
mutex = fio_mutex_init(FIO_MUTEX
_LOCKED);
+ td->
sem = fio_sem_init(FIO_SEM
_LOCKED);
td->ts.clat_percentiles = o->clat_percentiles;
td->ts.lat_percentiles = o->lat_percentiles;
td->ts.clat_percentiles = o->clat_percentiles;
td->ts.lat_percentiles = o->lat_percentiles;
@@
-2090,7
+2103,7
@@
static int fill_def_thread(void)
static void show_debug_categories(void)
{
#ifdef FIO_INC_DEBUG
static void show_debug_categories(void)
{
#ifdef FIO_INC_DEBUG
- struct debug_level *dl = &debug_levels[0];
+
const
struct debug_level *dl = &debug_levels[0];
int curlen, first = 1;
curlen = 0;
int curlen, first = 1;
curlen = 0;
@@
-2180,7
+2193,7
@@
static void usage(const char *name)
}
#ifdef FIO_INC_DEBUG
}
#ifdef FIO_INC_DEBUG
-struct debug_level debug_levels[] = {
+
const
struct debug_level debug_levels[] = {
{ .name = "process",
.help = "Process creation/exit logging",
.shift = FD_PROCESS,
{ .name = "process",
.help = "Process creation/exit logging",
.shift = FD_PROCESS,
@@
-2258,7
+2271,7
@@
struct debug_level debug_levels[] = {
static int set_debug(const char *string)
{
static int set_debug(const char *string)
{
- struct debug_level *dl;
+
const
struct debug_level *dl;
char *p = (char *) string;
char *opt;
int i;
char *p = (char *) string;
char *opt;
int i;