In the kconsumerd thread, the one use case where the kconsumerd tells us
he's ready but we are unable to connect is now validate using the
kconsumerd_pid in the spawn_kconsumerd_thread function.
Also, we do not iterate over and over on the error socket anymore. Upon
receiving an error from the kconsumerd, this means that the daemon will
quit and thus the thread is no longer necessary.
Signed-off-by: David Goulet <david.goulet@polymtl.ca>
+ /* Getting status code from kconsumerd */
ret = lttcomm_recv_unix_sock(sock, &code, sizeof(enum lttcomm_return_code));
if (ret <= 0) {
goto error;
ret = lttcomm_recv_unix_sock(sock, &code, sizeof(enum lttcomm_return_code));
if (ret <= 0) {
goto error;
if (code == KCONSUMERD_COMMAND_SOCK_READY) {
kconsumerd_cmd_sock = lttcomm_connect_unix_sock(kconsumerd_cmd_unix_sock_path);
if (kconsumerd_cmd_sock < 0) {
if (code == KCONSUMERD_COMMAND_SOCK_READY) {
kconsumerd_cmd_sock = lttcomm_connect_unix_sock(kconsumerd_cmd_unix_sock_path);
if (kconsumerd_cmd_sock < 0) {
+ sem_post(&kconsumerd_sem);
perror("kconsumerd connect");
goto error;
}
perror("kconsumerd connect");
goto error;
}
- while (1) {
- /* Wait for any kconsumerd error */
- ret = lttcomm_recv_unix_sock(sock, &code, sizeof(enum lttcomm_return_code));
- if (ret <= 0) {
- ERR("Kconsumerd closed the command socket");
- goto error;
- }
-
- ERR("Kconsumerd return code : %s", lttcomm_get_readable_code(-code));
- if (code != KCONSUMERD_POLL_HUP) {
- goto error;
- }
+ /* Wait for any kconsumerd error */
+ ret = lttcomm_recv_unix_sock(sock, &code, sizeof(enum lttcomm_return_code));
+ if (ret <= 0) {
+ ERR("Kconsumerd closed the command socket");
+ goto error;
+ ERR("Kconsumerd return code : %s", lttcomm_get_readable_code(-code));
+
error:
kconsumerd_pid = 0;
DBG("Kconsumerd thread dying");
error:
kconsumerd_pid = 0;
DBG("Kconsumerd thread dying");
/* Wait for the kconsumerd thread to be ready */
sem_wait(&kconsumerd_sem);
/* Wait for the kconsumerd thread to be ready */
sem_wait(&kconsumerd_sem);
+ if (kconsumerd_pid == 0) {
+ ERR("Kconsumerd did not start");
+ goto error;
+ }
+
+ ret = LTTCOMM_KERN_CONSUMER_FAIL;
DBG("Kconsumerd pid %d", ret);
DBG("Spawning kconsumerd thread");
DBG("Kconsumerd pid %d", ret);
DBG("Spawning kconsumerd thread");
ret = spawn_kconsumerd_thread();
if (ret < 0) {
ERR("Fatal error spawning kconsumerd thread");
ret = spawn_kconsumerd_thread();
if (ret < 0) {
ERR("Fatal error spawning kconsumerd thread");