aboutsummaryrefslogtreecommitdiff
path: root/src/common/helper.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/common/helper.c')
-rw-r--r--src/common/helper.c34
1 files changed, 34 insertions, 0 deletions
diff --git a/src/common/helper.c b/src/common/helper.c
index 5bbb2586..ebe9fd41 100644
--- a/src/common/helper.c
+++ b/src/common/helper.c
@@ -447,4 +447,38 @@ void doneGNUnetGTKCommon() {
447 MUTEX_DESTROY(&sclock); 447 MUTEX_DESTROY(&sclock);
448} 448}
449 449
450struct rwsc_closure {
451 Semaphore * sig;
452 PThreadMain realMain;
453 void * arg;
454};
455
456static void * shutdownCode(void * arg) {
457 struct rwsc_closure * cls = arg;
458 void * ret;
459
460 ret = cls->realMain(cls->arg);
461 SEMAPHORE_UP(cls->sig);
462 return ret;
463}
464
465void run_with_save_calls(PThreadMain cb,
466 void * arg) {
467 PTHREAD_T doneThread;
468 Semaphore * sig;
469 void * unused;
470
471 sig = SEMAPHORE_NEW(0);
472 if (0 != PTHREAD_CREATE(&doneThread,
473 &shutdownCode,
474 sig,
475 64*1024))
476 DIE_STRERROR("pthread_create");
477 while (OK != SEMAPHORE_DOWN_NONBLOCKING(sig))
478 gtkRunSomeSaveCalls();
479 PTHREAD_JOIN(&doneThread,
480 &unused);
481 SEMAPHORE_FREE(sig);
482}
483
450/* end of helper.c */ 484/* end of helper.c */