Fix handling of sessiond respawn after a SIGKILL
[lttng-tools.git] / liblttngctl / liblttngctl.c
index fd5a552cf012d94e904b72f77cf7dc86d9635e72..2464bce3b2d1eb30ab0252a2fc4f224a5a85b0c0 100644 (file)
@@ -354,7 +354,7 @@ int lttng_add_context(struct lttng_domain *domain,
 int lttng_enable_event(struct lttng_domain *domain,
                struct lttng_event *ev, const char *channel_name)
 {
-       int ret = -1;
+       int ret;
 
        if (channel_name == NULL) {
                copy_string(lsm.u.enable.channel_name, DEFAULT_CHANNEL_NAME, NAME_MAX);
@@ -362,30 +362,20 @@ int lttng_enable_event(struct lttng_domain *domain,
                copy_string(lsm.u.enable.channel_name, channel_name, NAME_MAX);
        }
 
-       if (domain) {
-               switch (domain->type) {
-                       case LTTNG_DOMAIN_KERNEL:
-                               if (ev == NULL) {
-                                       ret = ask_sessiond(LTTNG_KERNEL_ENABLE_ALL_EVENT, NULL);
-                               } else {
-                                       memcpy(&lsm.u.enable.event, ev, sizeof(struct lttng_event));
-                                       ret = ask_sessiond(LTTNG_KERNEL_ENABLE_EVENT, NULL);
-                               }
-                               break;
-                       case LTTNG_DOMAIN_UST:
-                               ret = LTTCOMM_NOT_IMPLEMENTED;
-                               break;
-                       default:
-                               ret = LTTCOMM_UNKNOWN_DOMAIN;
-                               break;
-               };
+       copy_lttng_domain(domain);
+
+       if (ev == NULL) {
+               ret = ask_sessiond(LTTNG_ENABLE_ALL_EVENT, NULL);
+       } else {
+               memcpy(&lsm.u.enable.event, ev, sizeof(struct lttng_event));
+               ret = ask_sessiond(LTTNG_ENABLE_EVENT, NULL);
        }
 
        return ret;
 }
 
 /*
- * Disable an event in the kernel tracer.
+ * Disable event of a channel and domain.
  */
 int lttng_disable_event(struct lttng_domain *domain, const char *name,
                const char *channel_name)
@@ -398,60 +388,34 @@ int lttng_disable_event(struct lttng_domain *domain, const char *name,
                copy_string(lsm.u.disable.channel_name, channel_name, NAME_MAX);
        }
 
-       if (domain) {
-               switch (domain->type) {
-                       case LTTNG_DOMAIN_KERNEL:
-                               if (name == NULL) {
-                                       ret = ask_sessiond(LTTNG_KERNEL_DISABLE_ALL_EVENT, NULL);
-                               } else {
-                                       copy_string(lsm.u.disable.name, name, NAME_MAX);
-                                       ret = ask_sessiond(LTTNG_KERNEL_DISABLE_EVENT, NULL);
-                               }
-                               break;
-                       case LTTNG_DOMAIN_UST:
-                               ret = LTTCOMM_NOT_IMPLEMENTED;
-                               break;
-                       default:
-                               ret = LTTCOMM_UNKNOWN_DOMAIN;
-                               break;
-               };
+       copy_lttng_domain(domain);
+
+       if (name == NULL) {
+               ret = ask_sessiond(LTTNG_DISABLE_ALL_EVENT, NULL);
+       } else {
+               copy_string(lsm.u.disable.name, name, NAME_MAX);
+               ret = ask_sessiond(LTTNG_DISABLE_EVENT, NULL);
        }
 
        return ret;
 }
 
 /*
- * Enable recording for a channel for the kernel tracer.
+ * Enable channel per domain
  */
 int lttng_enable_channel(struct lttng_domain *domain,
                struct lttng_channel *chan)
 {
-       int ret = -1;
-
        if (chan) {
                memcpy(&lsm.u.channel.chan, chan, sizeof(struct lttng_channel));
        }
 
-       if (domain) {
-               switch (domain->type) {
-                       case LTTNG_DOMAIN_KERNEL:
-                               ret = ask_sessiond(LTTNG_KERNEL_ENABLE_CHANNEL, NULL);
-                               break;
-                       case LTTNG_DOMAIN_UST:
-                               ret = LTTCOMM_NOT_IMPLEMENTED;
-                               break;
-                       default:
-                               ret = LTTCOMM_UNKNOWN_DOMAIN;
-                               break;
-               };
-       }
+       copy_lttng_domain(domain);
 
-       return ret;
+       return ask_sessiond(LTTNG_ENABLE_CHANNEL, NULL);
 }
 
 /*
- * Disable channel.
- *
  * All tracing will be stopped for registered events of the channel.
  */
 int lttng_disable_channel(struct lttng_domain *domain, const char *name)
@@ -611,6 +575,22 @@ int lttng_set_tracing_group(const char *name)
        return 0;
 }
 
+/*
+ *  lttng_calibrate
+ */
+int lttng_calibrate(struct lttng_domain *domain,
+               struct lttng_calibrate *calibrate)
+{
+       int ret;
+
+       copy_lttng_domain(domain);
+
+       memcpy(&lsm.u.calibrate, calibrate, sizeof(struct lttng_calibrate));
+       ret = ask_sessiond(LTTNG_CALIBRATE, NULL);
+
+       return ret;
+}
+
 /*
  *  lttng_check_session_daemon
  *
@@ -628,13 +608,22 @@ int lttng_session_daemon_alive(void)
                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;
 }
This page took 0.025064 seconds and 4 git commands to generate.