projects
/
goodguy
/
history.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
clip picons as clip_icon.png, vwindow hang, fix for drop target test
[goodguy/history.git]
/
cinelerra-5.1
/
guicast
/
thread.C
diff --git
a/cinelerra-5.1/guicast/thread.C
b/cinelerra-5.1/guicast/thread.C
index 26ccf9a45918ce78b7147c4dc7bb6829b136da18..c2f3321d7987a28f85f90bf65b83078bb65cc72d 100644
(file)
--- a/
cinelerra-5.1/guicast/thread.C
+++ b/
cinelerra-5.1/guicast/thread.C
@@
-65,8
+65,8
@@
void* Thread::entrypoint(void *parameters)
thread->run();
thread->finished = true;
if( !thread->synchronous ) {
thread->run();
thread->finished = true;
if( !thread->synchronous ) {
- if( !thread->cancelled ) TheList::dbg_del(thread->tid);
if( thread->autodelete ) delete thread;
if( thread->autodelete ) delete thread;
+ else if( !thread->cancelled ) TheList::dbg_del(thread->tid);
else thread->tid = ((pthread_t)-1);
}
return NULL;
else thread->tid = ((pthread_t)-1);
}
return NULL;
@@
-106,9
+106,13
@@
void Thread::start()
perror("Thread::start pthread_attr_setinheritsched");
}
perror("Thread::start pthread_attr_setinheritsched");
}
+// autodelete may delete this immediately after create
+ int autodelete = this->autodelete;
+
pthread_create(&tid, &attr, Thread::entrypoint, this);
pthread_create(&tid, &attr, Thread::entrypoint, this);
- TheList::dbg_add(tid, owner, typeid(*this).name());
+ if( !autodelete )
+ TheList::dbg_add(tid, owner, typeid(*this).name());
}
int Thread::cancel()
}
int Thread::cancel()
@@
-146,7
+150,7
@@
int Thread::join() // join this thread
while( running() && !cancelled ) {
int ret = pthread_kill(tid, 0);
if( ret ) break;
while( running() && !cancelled ) {
int ret = pthread_kill(tid, 0);
if( ret ) break;
- usleep(
20
0000);
+ usleep(
1
0000);
}
tid = ((pthread_t)-1);
}
}
tid = ((pthread_t)-1);
}