diff options
author | Martin Poirier <theeth@yahoo.com> | 2008-08-15 03:48:52 +0400 |
---|---|---|
committer | Martin Poirier <theeth@yahoo.com> | 2008-08-15 03:48:52 +0400 |
commit | feb5e3a688519316c02e9f2d0e0062d5d3ffa907 (patch) | |
tree | 767a2631d81c3baa6706abaae287d51d582b0001 | |
parent | db42038bcf4373da6c06d936cf268fa90a90a2f4 (diff) |
Add a function to join thread by index in the thread list.
This can be safely merged in trunk, in case anyone needs something like that.
-rw-r--r-- | source/blender/blenlib/BLI_threads.h | 1 | ||||
-rw-r--r-- | source/blender/blenlib/intern/threads.c | 15 |
2 files changed, 16 insertions, 0 deletions
diff --git a/source/blender/blenlib/BLI_threads.h b/source/blender/blenlib/BLI_threads.h index 39162b8bd91..386dc7ab1ef 100644 --- a/source/blender/blenlib/BLI_threads.h +++ b/source/blender/blenlib/BLI_threads.h @@ -45,6 +45,7 @@ int BLI_available_threads(struct ListBase *threadbase); int BLI_available_thread_index(struct ListBase *threadbase); void BLI_insert_thread (struct ListBase *threadbase, void *callerdata); void BLI_remove_thread (struct ListBase *threadbase, void *callerdata); +void BLI_remove_thread_index(struct ListBase *threadbase, int index); void BLI_end_threads (struct ListBase *threadbase); void BLI_lock_thread (int type); diff --git a/source/blender/blenlib/intern/threads.c b/source/blender/blenlib/intern/threads.c index 92fad291e83..70fe07bc8c6 100644 --- a/source/blender/blenlib/intern/threads.c +++ b/source/blender/blenlib/intern/threads.c @@ -199,6 +199,21 @@ void BLI_remove_thread(ListBase *threadbase, void *callerdata) } } +void BLI_remove_thread_index(ListBase *threadbase, int index) +{ + ThreadSlot *tslot; + int counter=0; + + for(tslot = threadbase->first; tslot; tslot = tslot->next, counter++) { + if (counter == index && tslot->avail == 0) { + tslot->callerdata = NULL; + pthread_join(tslot->pthread, NULL); + tslot->avail = 1; + break; + } + } +} + void BLI_end_threads(ListBase *threadbase) { ThreadSlot *tslot; |