projects
/
urcu.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
rculfhash test: print number of add fail (uniquify matches)
[urcu.git]
/
urcu-bp.c
diff --git
a/urcu-bp.c
b/urcu-bp.c
index 39a6cd0e9ab3ffe06f1d96eaeb889f77f692ac89..2ae3408c25fd42cc6788c6ec8664c91cf9868d87 100644
(file)
--- a/
urcu-bp.c
+++ b/
urcu-bp.c
@@
-24,6
+24,7
@@
*/
#define _GNU_SOURCE
*/
#define _GNU_SOURCE
+#define _LGPL_SOURCE
#include <stdio.h>
#include <pthread.h>
#include <signal.h>
#include <stdio.h>
#include <pthread.h>
#include <signal.h>
@@
-35,11
+36,14
@@
#include <unistd.h>
#include <sys/mman.h>
#include <unistd.h>
#include <sys/mman.h>
+#include "urcu/wfqueue.h"
#include "urcu/map/urcu-bp.h"
#include "urcu/map/urcu-bp.h"
-
#include "urcu/static/urcu-bp.h"
#include "urcu/static/urcu-bp.h"
+
/* Do not #define _LGPL_SOURCE to ensure we can emit the wrapper symbols */
/* Do not #define _LGPL_SOURCE to ensure we can emit the wrapper symbols */
+#undef _LGPL_SOURCE
#include "urcu-bp.h"
#include "urcu-bp.h"
+#define _LGPL_SOURCE
#ifndef MAP_ANONYMOUS
#define MAP_ANONYMOUS MAP_ANON
#ifndef MAP_ANONYMOUS
#define MAP_ANONYMOUS MAP_ANON
@@
-78,6
+82,11
@@
void *mremap(void *old_address, size_t old_size, size_t new_size, int flags)
#define RCU_SLEEP_DELAY 1000
#define ARENA_INIT_ALLOC 16
#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;
void __attribute__((destructor)) rcu_bp_exit(void);
static pthread_mutex_t rcu_gp_lock = PTHREAD_MUTEX_INITIALIZER;
@@
-295,7
+304,7
@@
static void add_thread(void)
if (registry_arena.len
< registry_arena.used + sizeof(struct rcu_reader))
resize_arena(®istry_arena,
if (registry_arena.len
< registry_arena.used + sizeof(struct rcu_reader))
resize_arena(®istry_arena,
- max(registry_arena.len << 1, ARENA_INIT_ALLOC));
+
caa_
max(registry_arena.len << 1, ARENA_INIT_ALLOC));
/*
* Find a free spot.
*/
/*
* Find a free spot.
*/
@@
-364,9
+373,10
@@
end:
assert(!ret);
}
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);
}
/*
}
/*
This page took
0.025231 seconds
and
4
git commands to generate.