this.outToSessiond = new DataOutputStream(sessiondSock.getOutputStream());
}
- private static String getUstAppPath() {
- return System.getenv("LTTNG_UST_APP_PATH");
+ private String getUstAppPath() {
+ String ustAppPath = System.getenv("LTTNG_UST_APP_PATH");
+ if (ustAppPath != null) {
+ String[] paths = ustAppPath.split(":");
+ if (paths.length > 1) {
+ log("':' separator in LTTNG_UST_APP_PATH, only the first path will be used");
+ }
+ return paths[0];
+ }
+ return ustAppPath;
}
private static String getHomePath() {
return (const char *) lttng_ust_getenv("HOME");
}
+/*
+ * Returns the LTTNG_UST_APP_PATH path. If environment variable exists
+ * and contains a ':', the first path before the ':' separator is returned.
+ * The return value should be freed by the caller if it is not NULL.
+ */
static
-const char *get_lttng_ust_app_path(void)
+char *get_lttng_ust_app_path(void)
{
- return (const char *) lttng_ust_getenv("LTTNG_UST_APP_PATH");
+ const char *env_val = lttng_ust_getenv("LTTNG_UST_APP_PATH");
+ char *val = NULL;
+ char *sep = NULL;
+ if (env_val == NULL)
+ goto error;
+ sep = strchr((char*)env_val, ':');
+ if (sep) {
+ /*
+ * Split into multiple paths using ':' as a separator.
+ * There is no escaping of the ':' separator.
+ */
+ WARN("':' separator in LTTNG_UST_APP_PATH, only the first path will be used.");
+ val = zmalloc(sep - env_val + 1);
+ if (!val) {
+ PERROR("zmalloc get_lttng_ust_app_path");
+ goto error;
+ }
+ memcpy(val, env_val, sep - env_val);
+ val[sep - env_val] = '\0';
+ } else {
+ val = strdup(env_val);
+ if (!val) {
+ PERROR("strdup");
+ goto error;
+ }
+ }
+
+error:
+ return val;
}
/*
static
int setup_ust_apps(void)
{
- const char *ust_app_path;
+ char *ust_app_path = NULL;
int ret = 0;
uid_t uid;
lttng_pthread_getname_np(ust_app.procname, LTTNG_UST_CONTEXT_PROCNAME_LEN);
end:
+ if (ust_app_path)
+ free(ust_app_path);
return ret;
}
return port
def _get_ust_app_path():
- return os.getenv('LTTNG_UST_APP_PATH')
+ paths = os.getenv('LTTNG_UST_APP_PATH')
+ if paths is None:
+ return paths
+ paths = paths.split(':')
+ if len(paths) > 1:
+ dbg._pwarning("':' separator in LTTNG_UST_APP_PATH, only the first path will be used")
+ return paths[0]
def _get_user_home_path():
# $LTTNG_HOME overrides $HOME if it exists
sys_port = None
try:
- if ust_app_port is not None:
+ if ust_app_port is not None:
dbg._pdebug('creating ust_app client thread')
t = threading.Thread(target=_client_thread_target,
args=('ust_app', ust_app_port, reg_queue))