projects
/
lttng-ust.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix: add urcu-bp TLS fixup
[lttng-ust.git]
/
liblttng-ust
/
lttng-ust-comm.c
diff --git
a/liblttng-ust/lttng-ust-comm.c
b/liblttng-ust/lttng-ust-comm.c
index 27786945b46430e99f5a173ee28a9c7907c6a03c..8e1a0f35ff74c820f0cc195a55ae38bf27850b1a 100644
(file)
--- a/
liblttng-ust/lttng-ust-comm.c
+++ b/
liblttng-ust/lttng-ust-comm.c
@@
-34,7
+34,6
@@
#include <time.h>
#include <assert.h>
#include <signal.h>
#include <time.h>
#include <assert.h>
#include <signal.h>
-#include <dlfcn.h>
#include <urcu/uatomic.h>
#include <urcu/futex.h>
#include <urcu/compiler.h>
#include <urcu/uatomic.h>
#include <urcu/futex.h>
#include <urcu/compiler.h>
@@
-266,6
+265,16
@@
void lttng_fixup_nest_count_tls(void)
asm volatile ("" : : "m" (URCU_TLS(lttng_ust_nest_count)));
}
asm volatile ("" : : "m" (URCU_TLS(lttng_ust_nest_count)));
}
+/*
+ * Fixup urcu bp TLS.
+ */
+static
+void lttng_fixup_urcu_bp_tls(void)
+{
+ rcu_read_lock();
+ rcu_read_unlock();
+}
+
int lttng_get_notify_socket(void *owner)
{
struct sock_info *info = owner;
int lttng_get_notify_socket(void *owner)
{
struct sock_info *info = owner;
@@
-820,9
+829,14
@@
void cleanup_sock_info(struct sock_info *sock_info, int exiting)
sock_info->notify_socket = -1;
}
if (sock_info->wait_shm_mmap) {
sock_info->notify_socket = -1;
}
if (sock_info->wait_shm_mmap) {
- ret = munmap(sock_info->wait_shm_mmap, sysconf(_SC_PAGE_SIZE));
- if (ret) {
- ERR("Error unmapping wait shm");
+ long page_size;
+
+ page_size = sysconf(_SC_PAGE_SIZE);
+ if (page_size > 0) {
+ ret = munmap(sock_info->wait_shm_mmap, page_size);
+ if (ret) {
+ ERR("Error unmapping wait shm");
+ }
}
sock_info->wait_shm_mmap = NULL;
}
}
sock_info->wait_shm_mmap = NULL;
}
@@
-995,15
+1009,20
@@
error_close:
static
char *get_map_shm(struct sock_info *sock_info)
{
static
char *get_map_shm(struct sock_info *sock_info)
{
-
size_t mmap_size = sysconf(_SC_PAGE_SIZE)
;
+
long page_size
;
int wait_shm_fd, ret;
char *wait_shm_mmap;
int wait_shm_fd, ret;
char *wait_shm_mmap;
- wait_shm_fd = get_wait_shm(sock_info, mmap_size);
+ page_size = sysconf(_SC_PAGE_SIZE);
+ if (page_size < 0) {
+ goto error;
+ }
+
+ wait_shm_fd = get_wait_shm(sock_info, page_size);
if (wait_shm_fd < 0) {
goto error;
}
if (wait_shm_fd < 0) {
goto error;
}
- wait_shm_mmap = mmap(NULL,
mmap
_size, PROT_READ,
+ wait_shm_mmap = mmap(NULL,
page
_size, PROT_READ,
MAP_SHARED, wait_shm_fd, 0);
/* close shm fd immediately after taking the mmap reference */
ret = close(wait_shm_fd);
MAP_SHARED, wait_shm_fd, 0);
/* close shm fd immediately after taking the mmap reference */
ret = close(wait_shm_fd);
@@
-1338,6
+1357,7
@@
void __attribute__((constructor)) lttng_ust_init(void)
* to be the dynamic linker mutex) and ust_lock, taken within
* the ust lock.
*/
* to be the dynamic linker mutex) and ust_lock, taken within
* the ust lock.
*/
+ lttng_fixup_urcu_bp_tls();
lttng_fixup_ringbuffer_tls();
lttng_fixup_vtid_tls();
lttng_fixup_nest_count_tls();
lttng_fixup_ringbuffer_tls();
lttng_fixup_vtid_tls();
lttng_fixup_nest_count_tls();
This page took
0.024473 seconds
and
4
git commands to generate.