Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
kill another unused thread function
authorMartin Quinson <martin.quinson@loria.fr>
Sun, 6 Mar 2016 01:06:05 +0000 (02:06 +0100)
committerMartin Quinson <martin.quinson@loria.fr>
Sun, 6 Mar 2016 01:34:22 +0000 (02:34 +0100)
xbt_os_cond_timedwait()
+ other cleanups

include/xbt/xbt_os_thread.h
src/xbt/xbt_os_thread.c

index c903363..fb39e5b 100644 (file)
@@ -9,11 +9,13 @@
 #ifndef _XBT_OS_THREAD_H
 #define _XBT_OS_THREAD_H
 
-#include "simgrid_config.h" /* Windows or Posix */
-#include "xbt/function_types.h"
+#include "xbt/base.h"
 
 SG_BEGIN_DECL()
 
+#include <pthread.h>
+typedef pthread_key_t xbt_os_thread_key_t;
+
 /** @addtogroup XBT_thread
  *  @brief Thread portability layer
  * 
@@ -22,35 +24,15 @@ SG_BEGIN_DECL()
  * 
  *  @{
  */
-  /** \brief Thread data type (opaque structure) */
-typedef struct xbt_os_thread_ *xbt_os_thread_t;
-
-#ifdef _XBT_WIN32 /* defined if this is a windows system, 32bits or 64bits) */
-#include <windows.h>
-#endif
-
-#include <pthread.h>
-typedef pthread_key_t xbt_os_thread_key_t;
-/** Calls pthread_atfork() if present, and raise an exception otherwise.
- *
- * The only known user of this wrapper is mmalloc_preinit(), but it is absolutely mandatory there:
- * when used with tesh, mmalloc *must* be mutex protected and resistant to forks.
- * This functionality is the only way to get it working (by ensuring that the mutex is consistently released on forks)
- */
-XBT_PUBLIC(int) xbt_os_thread_atfork(void (*prepare)(void), void (*parent)(void), void (*child)(void));
 
 XBT_PUBLIC(int) xbt_os_get_numcores(void);
 
+  /** \brief Thread data type (opaque structure) */
+typedef struct xbt_os_thread_ *xbt_os_thread_t;
 XBT_PUBLIC(xbt_os_thread_t) xbt_os_thread_create(const char *name, pvoid_f_pvoid_t start_routine, void *param, void *data);
-
-/** Bind the thread to the given core, if possible.
- *
- * If pthread_setaffinity_np is not usable on that (non-gnu) platform, this function does nothing.
- */
-XBT_PUBLIC(int) xbt_os_thread_bind(xbt_os_thread_t thread, int core);
-
 XBT_PUBLIC(void) xbt_os_thread_exit(int *retcode);
 XBT_PUBLIC(void) xbt_os_thread_detach(xbt_os_thread_t thread);
+
 XBT_PUBLIC(xbt_os_thread_t) xbt_os_thread_self(void);
 XBT_PUBLIC(const char *) xbt_os_thread_self_name(void);
 XBT_PUBLIC(const char *) xbt_os_thread_name(xbt_os_thread_t);
@@ -65,10 +47,11 @@ XBT_PUBLIC(void) xbt_os_thread_yield(void);
 XBT_PUBLIC(void) xbt_os_thread_cancel(xbt_os_thread_t thread);
 XBT_PUBLIC(void) xbt_os_thread_setstacksize(int stack_size);
 XBT_PUBLIC(void) xbt_os_thread_setguardsize(int guard_size);
+XBT_PUBLIC(int) xbt_os_thread_bind(xbt_os_thread_t thread, int core);
+XBT_PUBLIC(int) xbt_os_thread_atfork(void (*prepare)(void), void (*parent)(void), void (*child)(void));
 
   /** \brief Thread mutex data type (opaque structure) */
 typedef struct xbt_os_mutex_ *xbt_os_mutex_t;
-
 XBT_PUBLIC(xbt_os_mutex_t) xbt_os_mutex_init(void);
 XBT_PUBLIC(void) xbt_os_mutex_acquire(xbt_os_mutex_t mutex);
 XBT_PUBLIC(void) xbt_os_mutex_release(xbt_os_mutex_t mutex);
@@ -76,17 +59,14 @@ XBT_PUBLIC(void) xbt_os_mutex_destroy(xbt_os_mutex_t mutex);
 
 /** \brief Thread condition data type (opaque structure) */
 typedef struct xbt_os_cond_ *xbt_os_cond_t;
-
 XBT_PUBLIC(xbt_os_cond_t) xbt_os_cond_init(void);
 XBT_PUBLIC(void) xbt_os_cond_wait(xbt_os_cond_t cond, xbt_os_mutex_t mutex);
-XBT_PUBLIC(void) xbt_os_cond_timedwait(xbt_os_cond_t cond, xbt_os_mutex_t mutex, double delay);
 XBT_PUBLIC(void) xbt_os_cond_signal(xbt_os_cond_t cond);
 XBT_PUBLIC(void) xbt_os_cond_broadcast(xbt_os_cond_t cond);
 XBT_PUBLIC(void) xbt_os_cond_destroy(xbt_os_cond_t cond);
 
 /** \brief Semaphore data type (opaque structure) */
 typedef struct xbt_os_sem_ *xbt_os_sem_t;
-
 XBT_PUBLIC(xbt_os_sem_t) xbt_os_sem_init(unsigned int value);
 XBT_PUBLIC(void) xbt_os_sem_acquire(xbt_os_sem_t sem);
 XBT_PUBLIC(void) xbt_os_sem_release(xbt_os_sem_t sem);
index ac9df60..c697ae7 100644 (file)
@@ -150,6 +150,13 @@ void xbt_os_thread_mod_postexit(void)
   __xbt_ex_terminate = &__xbt_ex_terminate_default;
 }
 
+/** Calls pthread_atfork() if present, and raise an exception otherwise.
+ *
+ * The only known user of this wrapper is mmalloc_preinit(), but it is absolutely mandatory there:
+ * when used with tesh, mmalloc *must* be mutex protected and resistant to forks.
+ * This functionality is the only way to get it working (by ensuring that the mutex is consistently released on forks)
+ */
+
 /* this function is critical to tesh+mmalloc, don't mess with it */
 int xbt_os_thread_atfork(void (*prepare)(void), void (*parent)(void), void (*child)(void))
 {
@@ -187,6 +194,10 @@ xbt_os_thread_t xbt_os_thread_create(const char *name,  pvoid_f_pvoid_t start_ro
   return res_thread;
 }
 
+/** Bind the thread to the given core, if possible.
+ *
+ * If pthread_setaffinity_np is not usable on that (non-gnu) platform, this function does nothing.
+ */
 int xbt_os_thread_bind(xbt_os_thread_t thread, int cpu){
   int errcode = 0;
 #ifdef HAVE_PTHREAD_SETAFFINITY
@@ -370,32 +381,6 @@ void xbt_os_cond_wait(xbt_os_cond_t cond, xbt_os_mutex_t mutex)
   xbt_assert(errcode==0, "pthread_cond_wait(%p,%p) failed: %s", cond, mutex, strerror(errcode));
 }
 
-
-void xbt_os_cond_timedwait(xbt_os_cond_t cond, xbt_os_mutex_t mutex, double delay)
-{
-  int errcode;
-  struct timespec ts_end;
-  double end = delay + xbt_os_time();
-
-  if (delay < 0) {
-    xbt_os_cond_wait(cond, mutex);
-  } else {
-    ts_end.tv_sec = (time_t) floor(end);
-    ts_end.tv_nsec = (long) ((end - ts_end.tv_sec) * 1000000000);
-    XBT_DEBUG("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:
-      THROWF(timeout_error, errcode,
-             "condition %p (mutex %p) wasn't signaled before timeout (%f)",
-             cond, mutex, delay);
-    default:
-      THROWF(system_error, errcode, "pthread_cond_timedwait(%p,%p,%f) failed: %s", cond, mutex, delay, strerror(errcode));
-    }
-  }
-}
-
 void xbt_os_cond_signal(xbt_os_cond_t cond)
 {
   int errcode = pthread_cond_signal(&(cond->c));