- DEBUG1("Destroy parmap %p", parmap);
-
- unsigned int i;
-
- /* Lock the parmap, then signal every worker an wait for each to finish */
- xbt_os_mutex_acquire(parmap->mutex);
- for(i=0; i < parmap->num_workers; i++){
- parmap->flags[i] = PARMAP_DESTROY;
- }
-
- xbt_os_cond_broadcast(parmap->job_posted);
- while(parmap->num_workers){
- DEBUG1("Still %u workers, waiting...", parmap->num_workers);
- xbt_os_cond_wait(parmap->all_done, parmap->mutex);
- }
-
- /* Destroy pool's data structures */
- xbt_os_cond_destroy(parmap->job_posted);
- xbt_os_cond_destroy(parmap->all_done);
- xbt_free(parmap->flags);
- xbt_os_mutex_release(parmap->mutex);
- xbt_os_mutex_destroy(parmap->mutex);
+ parmap->status = PARMAP_DESTROY;
+#ifdef HAVE_FUTEX_H
+ xbt_event_signal(parmap->sync_event);
+ xbt_free(parmap->sync_event);
+#endif