libzzuf: protect library initialisation with a mutex.
This commit is contained in:
parent
cc2cb7e305
commit
bad2925778
@ -49,6 +49,7 @@
|
|||||||
#include "network.h"
|
#include "network.h"
|
||||||
#include "sys.h"
|
#include "sys.h"
|
||||||
#include "fuzz.h"
|
#include "fuzz.h"
|
||||||
|
#include "util/mutex.h"
|
||||||
|
|
||||||
#if defined HAVE_WINDOWS_H
|
#if defined HAVE_WINDOWS_H
|
||||||
BOOL WINAPI DllMain(HINSTANCE, DWORD, PVOID);
|
BOOL WINAPI DllMain(HINSTANCE, DWORD, PVOID);
|
||||||
@ -107,14 +108,19 @@ int g_network_fuzzing = 0;
|
|||||||
*/
|
*/
|
||||||
void libzzuf_init(void)
|
void libzzuf_init(void)
|
||||||
{
|
{
|
||||||
static int initializing = 0;
|
|
||||||
char *tmp, *tmp2;
|
|
||||||
|
|
||||||
/* Make sure we don't get initialised more than once */
|
/* Make sure we don't get initialised more than once */
|
||||||
if (initializing++)
|
static zzuf_mutex_t mutex = 0;
|
||||||
|
static int initialised = 0;
|
||||||
|
zzuf_mutex_lock(&mutex);
|
||||||
|
if (initialised++)
|
||||||
|
{
|
||||||
|
zzuf_mutex_unlock(&mutex);
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
zzuf_mutex_unlock(&mutex);
|
||||||
|
|
||||||
tmp = getenv("ZZUF_DEBUG");
|
/* Open the debug channel */
|
||||||
|
char *tmp = getenv("ZZUF_DEBUG");
|
||||||
if (tmp)
|
if (tmp)
|
||||||
g_debug_level = atoi(tmp);
|
g_debug_level = atoi(tmp);
|
||||||
|
|
||||||
@ -126,7 +132,7 @@ void libzzuf_init(void)
|
|||||||
g_debug_fd = atoi(tmp);
|
g_debug_fd = atoi(tmp);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* We need this as soon as possible */
|
/* We need malloc() and a few others as soon as possible */
|
||||||
_zz_mem_init();
|
_zz_mem_init();
|
||||||
|
|
||||||
tmp = getenv("ZZUF_SEED");
|
tmp = getenv("ZZUF_SEED");
|
||||||
@ -134,7 +140,7 @@ void libzzuf_init(void)
|
|||||||
zzuf_set_seed(atol(tmp));
|
zzuf_set_seed(atol(tmp));
|
||||||
|
|
||||||
tmp = getenv("ZZUF_MINRATIO");
|
tmp = getenv("ZZUF_MINRATIO");
|
||||||
tmp2 = getenv("ZZUF_MAXRATIO");
|
char *tmp2 = getenv("ZZUF_MAXRATIO");
|
||||||
if (tmp && *tmp && tmp2 && *tmp2)
|
if (tmp && *tmp && tmp2 && *tmp2)
|
||||||
zzuf_set_ratio(atof(tmp), atof(tmp2));
|
zzuf_set_ratio(atof(tmp), atof(tmp2));
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user