Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Bug fix.
[simgrid.git] / src / xbt / xbt_os_thread.c
index 56c15e1..f34821d 100644 (file)
@@ -66,11 +66,15 @@ void xbt_os_thread_mod_init(void) {
      THROW0(system_error,errcode,"pthread_key_create failed for xbt_self_thread_key");
 
    main_thread=xbt_new(s_xbt_os_thread_t,1);
+   main_thread->name = (char*)"main";
    main_thread->start_routine = NULL;
    main_thread->param = NULL;
    main_thread->exception = xbt_new(ex_ctx_t, 1);
    XBT_CTX_INITIALIZE(main_thread->exception);
 
+   __xbt_ex_ctx = _os_thread_ex_ctx;
+   __xbt_ex_terminate = _os_thread_ex_terminate;
+
    thread_mod_inited = 1;
 }
 void xbt_os_thread_mod_exit(void) {
@@ -111,6 +115,14 @@ xbt_os_thread_t xbt_os_thread_create(const char*name,
    return res_thread;
 }
 
+const char* xbt_os_thread_name(xbt_os_thread_t t) {
+   return t->name;
+}
+
+const char* xbt_os_thread_self_name(void) {
+   xbt_os_thread_t self = xbt_os_thread_self();
+   return self?self->name:"main";
+}
 void 
 xbt_os_thread_join(xbt_os_thread_t thread,void ** thread_return) {
        
@@ -229,6 +241,8 @@ void xbt_os_cond_timedwait(xbt_os_cond_t cond, xbt_os_mutex_t mutex, double dela
    ts_end.tv_nsec = (long)  ( ( end - ts_end.tv_sec) * 1000000000);
    DEBUG3("pthread_cond_timedwait(%p,%p,%p)",&(cond->c),&(mutex->m), &ts_end);
    switch ( (errcode=pthread_cond_timedwait(&(cond->c),&(mutex->m), &ts_end)) ) {
+    case 0:
+      return;
     case ETIMEDOUT:
      THROW3(timeout_error,errcode,"condition %p (mutex %p) wasn't signaled before timeout (%f)",
            cond,mutex, delay);
@@ -322,6 +336,15 @@ xbt_os_thread_t xbt_os_thread_create(const char *name,pvoid_f_pvoid_t start_rout
    return t;
 }
 
+const char* xbt_os_thread_name(xbt_os_thread_t t) {
+   return t->name;
+}
+
+const char* xbt_os_thread_self_name(void) {
+   xbt_os_thread_t t = xbt_os_thread_self();
+   return t?t->name:"main";
+}
+
 void 
 xbt_os_thread_join(xbt_os_thread_t thread,void ** thread_return) {