rt: Detach pthreads before exiting
Joinable pthreads need to be either joined or detached and we no longer join with the scheduler threads.
This commit is contained in:
parent
5d8d591ffc
commit
81e1564a7d
@ -319,6 +319,7 @@ rust_task_thread::create_task(rust_task *spawner, const char *name,
|
||||
|
||||
void rust_task_thread::run() {
|
||||
this->start_main_loop();
|
||||
detach();
|
||||
sched->release_task_thread();
|
||||
}
|
||||
|
||||
|
@ -4,6 +4,9 @@
|
||||
rust_thread::rust_thread() : thread(0) {
|
||||
}
|
||||
|
||||
rust_thread::~rust_thread() {
|
||||
}
|
||||
|
||||
#if defined(__WIN32__)
|
||||
static DWORD WINAPI
|
||||
#elif defined(__GNUC__)
|
||||
@ -41,3 +44,12 @@ rust_thread::join() {
|
||||
#endif
|
||||
thread = 0;
|
||||
}
|
||||
|
||||
void
|
||||
rust_thread::detach() {
|
||||
#if !defined(__WIN32__)
|
||||
// Don't leak pthread resources.
|
||||
// http://crosstantine.blogspot.com/2010/01/pthreadcreate-memory-leak.html
|
||||
pthread_detach(thread);
|
||||
#endif
|
||||
}
|
||||
|
@ -12,6 +12,8 @@ public:
|
||||
pthread_t thread;
|
||||
#endif
|
||||
rust_thread();
|
||||
virtual ~rust_thread();
|
||||
|
||||
void start();
|
||||
|
||||
virtual void run() {
|
||||
@ -19,8 +21,7 @@ public:
|
||||
}
|
||||
|
||||
void join();
|
||||
|
||||
virtual ~rust_thread() {} // quiet the compiler
|
||||
void detach();
|
||||
};
|
||||
|
||||
#endif /* RUST_THREAD_H */
|
||||
|
Loading…
x
Reference in New Issue
Block a user