Changeset: fef8e59cf8ad for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=fef8e59cf8ad
Modified Files:
gdk/gdk_utils.c
Branch: Jun2016
Log Message:
When exiting, immediately wait for other threads.
This solves a race condition where the server might not get closed
down correctly, causing a corrupt database.
diffs (41 lines):
diff --git a/gdk/gdk_utils.c b/gdk/gdk_utils.c
--- a/gdk/gdk_utils.c
+++ b/gdk/gdk_utils.c
@@ -1223,20 +1223,32 @@ GDKexiting(void)
return stopped;
}
+static struct serverthread {
+ struct serverthread *next;
+ MT_Id pid;
+} *serverthread;
+
void
GDKprepareExit(void)
{
+ struct serverthread *st;
+
if (ATOMIC_TAS(GDKstopped, GDKstoppedLock) != 0)
return;
if (GDKvmtrim_id)
MT_join_thread(GDKvmtrim_id);
+
+ MT_lock_set(&GDKthreadLock);
+ for (st = serverthread; st; st = serverthread) {
+ MT_lock_unset(&GDKthreadLock);
+ MT_join_thread(st->pid);
+ MT_lock_set(&GDKthreadLock);
+ serverthread = st->next;
+ GDKfree(st);
+ }
+ MT_lock_unset(&GDKthreadLock);
}
-static struct serverthread {
- struct serverthread *next;
- MT_Id pid;
-} *serverthread;
-
/* Register a thread that should be waited for in GDKreset. The
* thread must exit by itself when GDKexiting() returns true. */
void
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list