dotgnu-pnet-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[dotgnu-pnet-commits] libjit ChangeLog jit/jit-thread.h jit/jit-threa...


From: Aleksey Demakov
Subject: [dotgnu-pnet-commits] libjit ChangeLog jit/jit-thread.h jit/jit-threa...
Date: Tue, 19 Dec 2006 22:05:23 +0000

CVSROOT:        /sources/dotgnu-pnet
Module name:    libjit
Changes by:     Aleksey Demakov <avd>   06/12/19 22:05:23

Modified files:
        .              : ChangeLog 
        jit            : jit-thread.h jit-thread.c jit-init.c 

Log message:
        make sure that backend initialization is done only once

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/libjit/ChangeLog?cvsroot=dotgnu-pnet&r1=1.286&r2=1.287
http://cvs.savannah.gnu.org/viewcvs/libjit/jit/jit-thread.h?cvsroot=dotgnu-pnet&r1=1.2&r2=1.3
http://cvs.savannah.gnu.org/viewcvs/libjit/jit/jit-thread.c?cvsroot=dotgnu-pnet&r1=1.2&r2=1.3
http://cvs.savannah.gnu.org/viewcvs/libjit/jit/jit-init.c?cvsroot=dotgnu-pnet&r1=1.2&r2=1.3

Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/dotgnu-pnet/libjit/ChangeLog,v
retrieving revision 1.286
retrieving revision 1.287
diff -u -b -r1.286 -r1.287
--- ChangeLog   17 Dec 2006 21:06:26 -0000      1.286
+++ ChangeLog   19 Dec 2006 22:05:23 -0000      1.287
@@ -1,8 +1,14 @@
+2006-12-20  Aleksey Demakov  <address@hidden>
+
+       * jit/jit-thread.h, jit/jit-thread.c: add _jit_global_lock mutex.
+       * jit/jit-init.c (jit_init): make sure that initialization is done
+         only once.
+
 2006-12-17  Klaus Treichel  <address@hidden>
 
        * include/jit/jit-function.h, jit/jit-function.c: Add the function
-       jit_function_from_vtable_pointer to convert a vtable pointer back to the
-       jit_function_t.
+       jit_function_from_vtable_pointer to convert a vtable pointer back to
+       the jit_function_t.
 
 2006-11-29  Aleksey Demakov  <address@hidden>
 

Index: jit/jit-thread.h
===================================================================
RCS file: /sources/dotgnu-pnet/libjit/jit/jit-thread.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- jit/jit-thread.h    28 Oct 2004 01:23:09 -0000      1.2
+++ jit/jit-thread.h    19 Dec 2006 22:05:23 -0000      1.3
@@ -116,6 +116,11 @@
 #endif
 
 /*
+ * Mutex that synchronizes global data initialization.
+ */
+extern jit_mutex_t _jit_global_lock;
+
+/*
  * Define the primitive monitor operations.
  */
 

Index: jit/jit-thread.c
===================================================================
RCS file: /sources/dotgnu-pnet/libjit/jit/jit-thread.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- jit/jit-thread.c    28 Oct 2004 01:23:09 -0000      1.2
+++ jit/jit-thread.c    19 Dec 2006 22:05:23 -0000      1.3
@@ -34,6 +34,11 @@
 #endif
 #include <errno.h>
 
+/*
+ * Mutex that synchronizes global data initialization.
+ */
+jit_mutex_t _jit_global_lock;
+
 #if defined(JIT_THREADS_PTHREAD)
 
 /*
@@ -46,6 +51,8 @@
  */
 static void init_pthread(void)
 {
+       jit_mutex_create(&_jit_global_lock);
+
        /* Allocate a thread-specific variable for the JIT's thread
           control object, and arrange for it to be freed when the
           thread exits or is otherwise terminated */
@@ -64,6 +71,8 @@
  */
 static void init_win32_thread(void)
 {
+       jit_mutex_create(&_jit_global_lock);
+
        control_key = TlsAlloc();
 }
 

Index: jit/jit-init.c
===================================================================
RCS file: /sources/dotgnu-pnet/libjit/jit/jit-init.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- jit/jit-init.c      14 Aug 2006 19:21:19 -0000      1.2
+++ jit/jit-init.c      19 Dec 2006 22:05:23 -0000      1.3
@@ -37,9 +37,20 @@
 @*/
 void jit_init(void)
 {
+       static int init_done = 0;
+
        /* Make sure that the thread subsystem is initialized */
        _jit_thread_init();
 
+       /* Make sure that the initialization is done only once
+          (requires the global lock initialized above) */
+       jit_mutex_lock(&_jit_global_lock);
+       if(init_done)
+       {
+               goto done;
+       }
+       init_done = 1;
+
 #ifdef JIT_USE_SIGNALS
        /* Initialize the signal handlers */
        _jit_signal_init();
@@ -47,6 +58,9 @@
 
        /* Initialize the backend */
        _jit_init_backend();
+
+done:
+       jit_mutex_unlock(&_jit_global_lock);
 }
 
 /*@




reply via email to

[Prev in Thread] Current Thread [Next in Thread]