diff options
Diffstat (limited to 'src/common/helper.c')
-rw-r--r-- | src/common/helper.c | 34 |
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 | ||
450 | struct rwsc_closure { | ||
451 | Semaphore * sig; | ||
452 | PThreadMain realMain; | ||
453 | void * arg; | ||
454 | }; | ||
455 | |||
456 | static 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 | |||
465 | void 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 */ |