guile-cvs
[Top][All Lists]
Advanced

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

guile/guile-core/libguile ChangeLog coop.c


From: Mikael Djurfeldt
Subject: guile/guile-core/libguile ChangeLog coop.c
Date: Sat, 06 Oct 2001 12:30:20 -0400

CVSROOT:        /cvs
Module name:    guile
Changes by:     Mikael Djurfeldt <address@hidden>       01/10/06 12:30:20

Modified files:
        guile-core/libguile: ChangeLog coop.c 

Log message:
        * coop.c (mother_awake_p): New variable.
        (coop_create): Set mother_awake_p before creating or signalling
        mother; wait until mother is going to sleep before returning.
        (mother): Reset mother_awake_p before going to sleep.

CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/guile/guile-core/libguile/ChangeLog.diff?cvsroot=OldCVS&tr1=1.1522&tr2=1.1523&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/guile/guile-core/libguile/coop.c.diff?cvsroot=OldCVS&tr1=1.27&tr2=1.28&r1=text&r2=text

Patches:
Index: guile/guile-core/libguile/ChangeLog
diff -u guile/guile-core/libguile/ChangeLog:1.1522 
guile/guile-core/libguile/ChangeLog:1.1523
--- guile/guile-core/libguile/ChangeLog:1.1522  Fri Oct  5 16:18:30 2001
+++ guile/guile-core/libguile/ChangeLog Sat Oct  6 12:30:20 2001
@@ -1,3 +1,13 @@
+2001-10-06  Mikael Djurfeldt  <address@hidden>
+
+       These changes fixes a race condition in the Guile coop - pthread
+       compatibility code.
+       
+       * coop.c (mother_awake_p): New variable.
+       (coop_create): Set mother_awake_p before creating or signalling
+       mother; wait until mother is going to sleep before returning.
+       (mother): Reset mother_awake_p before going to sleep.
+
 2001-10-05  Dirk Herrmann  <address@hidden>
 
        * options.c (protected_objects, scm_init_options):  The content of
Index: guile/guile-core/libguile/coop.c
diff -u guile/guile-core/libguile/coop.c:1.27 
guile/guile-core/libguile/coop.c:1.28
--- guile/guile-core/libguile/coop.c:1.27       Fri Mar  9 22:09:07 2001
+++ guile/guile-core/libguile/coop.c    Sat Oct  6 12:30:20 2001
@@ -40,7 +40,7 @@
  * If you do not wish that, delete this exception notice.  */
 
 
-/* $Id: coop.c,v 1.27 2001/03/10 03:09:07 mdj Exp $ */
+/* $Id: coop.c,v 1.28 2001/10/06 16:30:20 mdj Exp $ */
 
 /* Cooperative thread library, based on QuickThreads */
 
@@ -171,6 +171,7 @@
 static pthread_cond_t coop_cond_create;
 static pthread_mutex_t coop_mutex_create;
 static pthread_t coop_mother;
+static int mother_awake_p = 0;
 static coop_t *coop_child;
 #endif
 
@@ -584,6 +585,7 @@
                      NULL,
                      dummy_start,
                      coop_child);
+      mother_awake_p = 0;
       do
        res = pthread_cond_wait (&coop_cond_create, &coop_mutex_create);
       while (res == EINTR);
@@ -618,6 +620,7 @@
       t->n_keys = 0;
 #ifdef GUILE_PTHREAD_COMPAT
       coop_child = t;
+      mother_awake_p = 1;
       if (coop_quitting_p < 0)
        {
          coop_quitting_p = 0;
@@ -635,7 +638,7 @@
        * condition variable because they are not safe against
        * pre-emptive switching.
        */
-      while (coop_child)
+      while (coop_child || mother_awake_p)
        usleep (0);
 #else
       t->sto = malloc (COOP_STKSIZE);



reply via email to

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