* @{
*/
-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);
unsigned long mask = ~((unsigned long)xbt_pagesize - 1);
void *addr = (void*)(((unsigned long)sbrk(0) + HEAP_OFFSET) & mask);
__mmalloc_default_mdp = xbt_mheap_new_options(-1, addr, XBT_MHEAP_OPTION_MEMSET);
- /* Fixme? only the default mdp in protected against forks */
- // This is mandated to protect the mmalloced areas through forks. Think of tesh.
- // Nah, removing the mutex isn't a good idea either for tesh
- int res = xbt_os_thread_atfork(mmalloc_fork_prepare, mmalloc_fork_parent, mmalloc_fork_child);
- if (res != 0)
- THROWF(system_error,0,"xbt_os_thread_atfork() failed: return value %d",res);
}
xbt_assert(__mmalloc_default_mdp != NULL);
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(xbt_sync_os, xbt, "Synchronization mechanism (OS-level)");
-typedef struct xbt_os_thread_ {
- pthread_t t;
- void *param;
- pvoid_f_pvoid_t start_routine;
-} s_xbt_os_thread_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)
- */
-
-/* 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))
-{
- return pthread_atfork(prepare, parent, child);
-}
-
/****** mutex related functions ******/
typedef struct xbt_os_mutex_ {
pthread_mutex_t m;