return ret;
}
- /* If socket exist, we consider the daemon started */
+ /* If socket exist, we check if the daemon listens to connect. */
ret = access(sessiond_sock_path, F_OK);
if (ret < 0) {
/* Not alive */
return 0;
}
+ ret = lttcomm_connect_unix_sock(sessiond_sock_path);
+ if (ret < 0) {
+ /* Not alive */
+ return 0;
+ }
+ ret = lttcomm_close_unix_sock(ret);
+ if (ret < 0)
+ perror("lttcomm_close_unix_sock");
+
/* Is alive */
return 1;
}
sun.sun_family = AF_UNIX;
strncpy(sun.sun_path, pathname, strlen(pathname));
+ /* Unlink the old file if present */
+ (void) unlink(pathname);
ret = bind(fd, (struct sockaddr *) &sun, sizeof(sun));
if (ret < 0) {
perror("bind");
utils.h trace.h session.h traceable-app.h ust-ctl.h \
context.h kernel-ctl.h ltt-sessiond.h
+# link on liblttngctl for check if sessiond is already alive.
ltt_sessiond_LDADD = \
$(top_builddir)/liblttsessiondcomm/liblttsessiondcomm.la \
$(top_builddir)/libkernelctl/libkernelctl.la \
- $(top_builddir)/libustctl/libustctl.la
+ $(top_builddir)/libustctl/libustctl.la \
+ $(top_builddir)/liblttngctl/liblttngctl.la
}
/*
- * Check if the global socket is available. If yes, error is returned.
+ * Check if the global socket is available, and if a daemon is answering
+ * at the other side. If yes, error is returned.
*/
static int check_existing_daemon(void)
{
int ret;
- ret = access(client_unix_sock_path, F_OK);
- if (ret == 0) {
- ret = access(apps_unix_sock_path, F_OK);
- }
-
- return ret;
+ if (access(client_unix_sock_path, F_OK) < 0 &&
+ access(apps_unix_sock_path, F_OK) < 0)
+ return 0;
+ /* Is there anybody out there ? */
+ if (lttng_session_daemon_alive())
+ return -EEXIST;
+ else
+ return 0;
}
/*
DBG("Application socket path %s", apps_unix_sock_path);
/*
- * See if daemon already exist. If any of the two socket needed by the
- * daemon are present, this test fails. However, if the daemon is killed
- * with a SIGKILL, those unix socket must be unlinked by hand.
+ * See if daemon already exist.
*/
- if ((ret = check_existing_daemon()) == 0) {
+ if ((ret = check_existing_daemon()) < 0) {
ERR("Already running daemon.\n");
/*
* We do not goto exit because we must not cleanup()