*/
#define _GNU_SOURCE
+#define _LGPL_SOURCE
#include <stdio.h>
#include <pthread.h>
#include <signal.h>
#include <unistd.h>
#include <sys/mman.h>
+#include "urcu/wfqueue.h"
#include "urcu/map/urcu-bp.h"
-
#include "urcu/static/urcu-bp.h"
+
/* Do not #define _LGPL_SOURCE to ensure we can emit the wrapper symbols */
+#undef _LGPL_SOURCE
#include "urcu-bp.h"
+#define _LGPL_SOURCE
#ifndef MAP_ANONYMOUS
#define MAP_ANONYMOUS MAP_ANON
#define RCU_SLEEP_DELAY 1000
#define ARENA_INIT_ALLOC 16
+/*
+ * Active attempts to check for reader Q.S. before calling sleep().
+ */
+#define RCU_QS_ACTIVE_ATTEMPTS 100
+
void __attribute__((destructor)) rcu_bp_exit(void);
static pthread_mutex_t rcu_gp_lock = PTHREAD_MUTEX_INITIALIZER;
assert(!ret);
}
-void rcu_bp_exit()
+void rcu_bp_exit(void)
{
- munmap(registry_arena.p, registry_arena.len);
+ if (registry_arena.p)
+ munmap(registry_arena.p, registry_arena.len);
}
/*