fix merge conflicts from master

This commit is contained in:
Paul Davis 2013-08-24 12:18:06 -04:00
commit ee1b49f87e
98 changed files with 20163 additions and 16410 deletions

View file

@ -80,12 +80,34 @@ fake_thread_start (void* arg)
void* (*thread_work)(void*) = ts->thread_work;
void* thread_arg = ts->arg;
pthread_set_name (ts->name.c_str());
delete ts;
/* name will be deleted by the default handler for GStaticPrivate, when the thread exits */
return thread_work (thread_arg);
pthread_set_name (ts->name.c_str());
/* we don't need this object anymore */
delete ts;
/* actually run the thread's work function */
void* ret = thread_work (thread_arg);
/* cleanup */
pthread_mutex_lock (&thread_map_lock);
for (ThreadMap::iterator i = all_threads.begin(); i != all_threads.end(); ++i) {
if (pthread_equal ((*i), pthread_self())) {
all_threads.erase (i);
break;
}
}
pthread_mutex_unlock (&thread_map_lock);
/* done */
return ret;
}
int
@ -147,10 +169,17 @@ void
pthread_cancel_all ()
{
pthread_mutex_lock (&thread_map_lock);
for (ThreadMap::iterator i = all_threads.begin(); i != all_threads.end(); ++i) {
for (ThreadMap::iterator i = all_threads.begin(); i != all_threads.end(); ) {
ThreadMap::iterator nxt = i;
++nxt;
if (!pthread_equal ((*i), pthread_self())) {
pthread_cancel ((*i));
}
i = nxt;
}
all_threads.clear();
pthread_mutex_unlock (&thread_map_lock);
@ -171,18 +200,3 @@ pthread_cancel_one (pthread_t thread)
pthread_mutex_unlock (&thread_map_lock);
}
void
pthread_exit_pbd (void* status)
{
pthread_t thread = pthread_self();
pthread_mutex_lock (&thread_map_lock);
for (ThreadMap::iterator i = all_threads.begin(); i != all_threads.end(); ++i) {
if (pthread_equal ((*i), thread)) {
all_threads.erase (i);
break;
}
}
pthread_mutex_unlock (&thread_map_lock);
pthread_exit (status);
}