projects
/
lttng-ust.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix: don't use strerror() from ust lock nocheck
[lttng-ust.git]
/
src
/
lib
/
lttng-ust
/
lttng-ust-comm.c
diff --git
a/src/lib/lttng-ust/lttng-ust-comm.c
b/src/lib/lttng-ust/lttng-ust-comm.c
index f180c3bc8277874ddd673954b1e3bf8467b7e95a..384a6a582af8a2034c9678b31b400b4e33b95f50 100644
(file)
--- a/
src/lib/lttng-ust/lttng-ust-comm.c
+++ b/
src/lib/lttng-ust/lttng-ust-comm.c
@@
-1,7
+1,7
@@
/*
* SPDX-License-Identifier: LGPL-2.1-only
*
/*
* SPDX-License-Identifier: LGPL-2.1-only
*
- * Copyright (C) 2011
David Goulet <david.goulet@polymtl.ca>
+ * Copyright (C) 2011
EfficiOS Inc.
* Copyright (C) 2011 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
*/
* Copyright (C) 2011 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
*/
@@
-38,6
+38,7
@@
#include <lttng/ust-thread.h>
#include <lttng/ust-tracer.h>
#include <lttng/ust-common.h>
#include <lttng/ust-thread.h>
#include <lttng/ust-tracer.h>
#include <lttng/ust-common.h>
+#include <lttng/ust-cancelstate.h>
#include <urcu/tls-compat.h>
#include "lib/lttng-ust/futex.h"
#include "common/ustcomm.h"
#include <urcu/tls-compat.h>
#include "lib/lttng-ust/futex.h"
#include "common/ustcomm.h"
@@
-125,25
+126,21
@@
int lttng_ust_loaded __attribute__((weak));
int ust_lock(void)
{
sigset_t sig_all_blocked, orig_mask;
int ust_lock(void)
{
sigset_t sig_all_blocked, orig_mask;
- int ret
, oldstate
;
+ int ret;
- ret = pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &oldstate);
- if (ret) {
- ERR("pthread_setcancelstate: %s", strerror(ret));
- }
- if (oldstate != PTHREAD_CANCEL_ENABLE) {
- ERR("pthread_setcancelstate: unexpected oldstate");
+ if (lttng_ust_cancelstate_disable_push()) {
+ ERR("lttng_ust_cancelstate_disable_push");
}
sigfillset(&sig_all_blocked);
ret = pthread_sigmask(SIG_SETMASK, &sig_all_blocked, &orig_mask);
if (ret) {
}
sigfillset(&sig_all_blocked);
ret = pthread_sigmask(SIG_SETMASK, &sig_all_blocked, &orig_mask);
if (ret) {
- ERR("pthread_sigmask:
%s", strerror(ret)
);
+ ERR("pthread_sigmask:
ret=%d", ret
);
}
if (!URCU_TLS(ust_mutex_nest)++)
pthread_mutex_lock(&ust_mutex);
ret = pthread_sigmask(SIG_SETMASK, &orig_mask, NULL);
if (ret) {
}
if (!URCU_TLS(ust_mutex_nest)++)
pthread_mutex_lock(&ust_mutex);
ret = pthread_sigmask(SIG_SETMASK, &orig_mask, NULL);
if (ret) {
- ERR("pthread_sigmask:
%s", strerror(ret)
);
+ ERR("pthread_sigmask:
ret=%d", ret
);
}
if (lttng_ust_comm_should_quit) {
return -1;
}
if (lttng_ust_comm_should_quit) {
return -1;
@@
-161,25
+158,21
@@
int ust_lock(void)
void ust_lock_nocheck(void)
{
sigset_t sig_all_blocked, orig_mask;
void ust_lock_nocheck(void)
{
sigset_t sig_all_blocked, orig_mask;
- int ret
, oldstate
;
+ int ret;
- ret = pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &oldstate);
- if (ret) {
- ERR("pthread_setcancelstate: %s", strerror(ret));
- }
- if (oldstate != PTHREAD_CANCEL_ENABLE) {
- ERR("pthread_setcancelstate: unexpected oldstate");
+ if (lttng_ust_cancelstate_disable_push()) {
+ ERR("lttng_ust_cancelstate_disable_push");
}
sigfillset(&sig_all_blocked);
ret = pthread_sigmask(SIG_SETMASK, &sig_all_blocked, &orig_mask);
if (ret) {
}
sigfillset(&sig_all_blocked);
ret = pthread_sigmask(SIG_SETMASK, &sig_all_blocked, &orig_mask);
if (ret) {
- ERR("pthread_sigmask:
%s", strerror(ret)
);
+ ERR("pthread_sigmask:
ret=%d", ret
);
}
if (!URCU_TLS(ust_mutex_nest)++)
pthread_mutex_lock(&ust_mutex);
ret = pthread_sigmask(SIG_SETMASK, &orig_mask, NULL);
if (ret) {
}
if (!URCU_TLS(ust_mutex_nest)++)
pthread_mutex_lock(&ust_mutex);
ret = pthread_sigmask(SIG_SETMASK, &orig_mask, NULL);
if (ret) {
- ERR("pthread_sigmask:
%s", strerror(ret)
);
+ ERR("pthread_sigmask:
ret=%d", ret
);
}
}
}
}
@@
-189,25
+182,21
@@
void ust_lock_nocheck(void)
void ust_unlock(void)
{
sigset_t sig_all_blocked, orig_mask;
void ust_unlock(void)
{
sigset_t sig_all_blocked, orig_mask;
- int ret
, oldstate
;
+ int ret;
sigfillset(&sig_all_blocked);
ret = pthread_sigmask(SIG_SETMASK, &sig_all_blocked, &orig_mask);
if (ret) {
sigfillset(&sig_all_blocked);
ret = pthread_sigmask(SIG_SETMASK, &sig_all_blocked, &orig_mask);
if (ret) {
- ERR("pthread_sigmask:
%s", strerror(ret)
);
+ ERR("pthread_sigmask:
ret=%d", ret
);
}
if (!--URCU_TLS(ust_mutex_nest))
pthread_mutex_unlock(&ust_mutex);
ret = pthread_sigmask(SIG_SETMASK, &orig_mask, NULL);
if (ret) {
}
if (!--URCU_TLS(ust_mutex_nest))
pthread_mutex_unlock(&ust_mutex);
ret = pthread_sigmask(SIG_SETMASK, &orig_mask, NULL);
if (ret) {
- ERR("pthread_sigmask: %s", strerror(ret));
- }
- ret = pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, &oldstate);
- if (ret) {
- ERR("pthread_setcancelstate: %s", strerror(ret));
+ ERR("pthread_sigmask: ret=%d", ret);
}
}
- if (
oldstate != PTHREAD_CANCEL_DISABLE
) {
- ERR("
pthread_setcancelstate: unexpected oldstate
");
+ if (
lttng_ust_cancelstate_disable_pop()
) {
+ ERR("
lttng_ust_cancelstate_disable_pop
");
}
}
}
}
@@
-259,7
+248,7
@@
struct sock_info {
int statedump_pending;
int initial_statedump_done;
/* Keep procname for statedump */
int statedump_pending;
int initial_statedump_done;
/* Keep procname for statedump */
- char procname[LTTNG_UST_
ABI
_PROCNAME_LEN];
+ char procname[LTTNG_UST_
CONTEXT
_PROCNAME_LEN];
};
/* Socket from app (connect) to session daemon (listen) for communication */
};
/* Socket from app (connect) to session daemon (listen) for communication */
@@
-482,7
+471,7
@@
int setup_global_apps(void)
}
global_apps.allowed = 1;
}
global_apps.allowed = 1;
- lttng_pthread_getname_np(global_apps.procname, LTTNG_UST_
ABI
_PROCNAME_LEN);
+ lttng_pthread_getname_np(global_apps.procname, LTTNG_UST_
CONTEXT
_PROCNAME_LEN);
error:
return ret;
}
error:
return ret;
}
@@
-528,7
+517,7
@@
int setup_local_apps(void)
goto end;
}
goto end;
}
- lttng_pthread_getname_np(local_apps.procname, LTTNG_UST_
ABI
_PROCNAME_LEN);
+ lttng_pthread_getname_np(local_apps.procname, LTTNG_UST_
CONTEXT
_PROCNAME_LEN);
end:
return ret;
}
end:
return ret;
}
@@
-620,7
+609,8
@@
void get_allow_blocking(void)
}
static
}
static
-int register_to_sessiond(int socket, enum lttng_ust_ctl_socket_type type)
+int register_to_sessiond(int socket, enum lttng_ust_ctl_socket_type type,
+ const char *procname)
{
return ustcomm_send_reg_msg(socket,
type,
{
return ustcomm_send_reg_msg(socket,
type,
@@
-629,7
+619,8
@@
int register_to_sessiond(int socket, enum lttng_ust_ctl_socket_type type)
lttng_ust_rb_alignof(uint16_t) * CHAR_BIT,
lttng_ust_rb_alignof(uint32_t) * CHAR_BIT,
lttng_ust_rb_alignof(uint64_t) * CHAR_BIT,
lttng_ust_rb_alignof(uint16_t) * CHAR_BIT,
lttng_ust_rb_alignof(uint32_t) * CHAR_BIT,
lttng_ust_rb_alignof(uint64_t) * CHAR_BIT,
- lttng_ust_rb_alignof(unsigned long) * CHAR_BIT);
+ lttng_ust_rb_alignof(unsigned long) * CHAR_BIT,
+ procname);
}
static
}
static
@@
-1457,8
+1448,7
@@
void cleanup_sock_info(struct sock_info *sock_info, int exiting)
}
sock_info->root_handle = -1;
}
}
sock_info->root_handle = -1;
}
- sock_info->registration_done = 0;
- sock_info->initial_statedump_done = 0;
+
/*
* wait_shm_mmap, socket and notify socket are used by listener
/*
* wait_shm_mmap, socket and notify socket are used by listener
@@
-1470,6
+1460,9
@@
void cleanup_sock_info(struct sock_info *sock_info, int exiting)
if (exiting)
return;
if (exiting)
return;
+ sock_info->registration_done = 0;
+ sock_info->initial_statedump_done = 0;
+
if (sock_info->socket != -1) {
ret = ustcomm_close_unix_sock(sock_info->socket);
if (ret) {
if (sock_info->socket != -1) {
ret = ustcomm_close_unix_sock(sock_info->socket);
if (ret) {
@@
-1911,7
+1904,8
@@
restart:
sock_info->root_handle = ret;
}
sock_info->root_handle = ret;
}
- ret = register_to_sessiond(sock_info->socket, LTTNG_UST_CTL_SOCKET_CMD);
+ ret = register_to_sessiond(sock_info->socket, LTTNG_UST_CTL_SOCKET_CMD,
+ sock_info->procname);
if (ret < 0) {
ERR("Error registering to %s ust cmd socket",
sock_info->name);
if (ret < 0) {
ERR("Error registering to %s ust cmd socket",
sock_info->name);
@@
-2004,7
+1998,7
@@
restart:
}
ret = register_to_sessiond(sock_info->notify_socket,
}
ret = register_to_sessiond(sock_info->notify_socket,
- LTTNG_UST_CTL_SOCKET_NOTIFY);
+ LTTNG_UST_CTL_SOCKET_NOTIFY
, sock_info->procname
);
if (ret < 0) {
ERR("Error registering to %s ust notify socket",
sock_info->name);
if (ret < 0) {
ERR("Error registering to %s ust notify socket",
sock_info->name);
@@
-2122,6
+2116,10
@@
void lttng_ust_check_soname_0(void)
* Expose a canary symbol of the previous ABI to ensure we catch uses of a
* liblttng-ust.so.0 dlopen'd after .so.1 has been loaded. Use a different
* symbol than the detection code to ensure we don't detect ourself.
* Expose a canary symbol of the previous ABI to ensure we catch uses of a
* liblttng-ust.so.0 dlopen'd after .so.1 has been loaded. Use a different
* symbol than the detection code to ensure we don't detect ourself.
+ *
+ * This scheme will only work on systems where the global symbol table has
+ * priority when resolving the symbols of a dlopened shared object, which is
+ * the case on Linux but not on FreeBSD.
*/
void init_usterr(void);
void init_usterr(void)
*/
void init_usterr(void);
void init_usterr(void)
@@
-2176,7
+2174,7
@@
void lttng_ust_ctor(void)
* this library so it never becomes zero, thus never gets unloaded from the
* address space of the process. Since we are already running in the
* constructor of the LTTNG_UST_LIB_SONAME library, calling dlopen will
* this library so it never becomes zero, thus never gets unloaded from the
* address space of the process. Since we are already running in the
* constructor of the LTTNG_UST_LIB_SONAME library, calling dlopen will
- * simply increment the refcount and no addition
n
al work is needed by the
+ * simply increment the refcount and no additional work is needed by the
* dynamic loader as the shared library is already loaded in the address
* space. As a safe guard, we use the RTLD_NODELETE flag to prevent
* unloading of the UST library if its refcount becomes zero (which should
* dynamic loader as the shared library is already loaded in the address
* space. As a safe guard, we use the RTLD_NODELETE flag to prevent
* unloading of the UST library if its refcount becomes zero (which should
@@
-2513,7
+2511,7
@@
void lttng_ust_after_fork_parent(sigset_t *restore_sigset)
return;
DBG("process %d", getpid());
lttng_ust_urcu_after_fork_parent();
return;
DBG("process %d", getpid());
lttng_ust_urcu_after_fork_parent();
- /* Release mutexes and reenable signals */
+ /* Release mutexes and re
-
enable signals */
ust_after_fork_common(restore_sigset);
}
ust_after_fork_common(restore_sigset);
}
@@
-2540,7
+2538,7
@@
void lttng_ust_after_fork_child(sigset_t *restore_sigset)
/* Release urcu mutexes */
lttng_ust_urcu_after_fork_child();
lttng_ust_cleanup(0);
/* Release urcu mutexes */
lttng_ust_urcu_after_fork_child();
lttng_ust_cleanup(0);
- /* Release mutexes and reenable signals */
+ /* Release mutexes and re
-
enable signals */
ust_after_fork_common(restore_sigset);
lttng_ust_ctor();
}
ust_after_fork_common(restore_sigset);
lttng_ust_ctor();
}
This page took
0.027895 seconds
and
4
git commands to generate.