X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=ustd%2Fustd.c;h=d2a9712a20c1ca78cbe99cc6be7337be9c602e31;hb=0ed54020dd215419ddb85dc059d983cff25e8729;hp=b38593b36b0d65cc9f89b2eea565aed612d97c58;hpb=c970a26f3e184f41495602b8028f6e163d7b5b9f;p=ust.git diff --git a/ustd/ustd.c b/ustd/ustd.c index b38593b..d2a9712 100644 --- a/ustd/ustd.c +++ b/ustd/ustd.c @@ -160,6 +160,14 @@ int put_subbuffer(struct buffer_info *buf) DBG("subbuffer put %s", buf->name); retval = PUT_SUBBUF_OK; } + else if(!strcmp(received_msg, "NOTFOUND")) { + WARN("For buffer %s, the trace was not found. This likely means it was destroyed by the user.", buf->name); + /* However, maybe this was not the last subbuffer. So + * we return the program died. + */ + retval = PUT_SUBBUF_DIED; + goto end_rep; + } else { DBG("put_subbuffer: received error, we were pushed"); retval = PUT_SUBBUF_PUSHED; @@ -252,6 +260,9 @@ struct buffer_info *connect_buffer(pid_t pid, const char *bufname) ERR("problem in ustcomm_send_request(get_pidunique)"); return NULL; } + if(result == 0) { + goto error; + } result = sscanf(received_msg, "%lld", &buf->pidunique); if(result != 1) { @@ -269,6 +280,9 @@ struct buffer_info *connect_buffer(pid_t pid, const char *bufname) ERR("problem in ustcomm_send_request(get_shmid)"); return NULL; } + if(result == 0) { + goto error; + } result = sscanf(received_msg, "%d %d", &buf->shmid, &buf->bufstruct_shmid); if(result != 2) { @@ -286,6 +300,9 @@ struct buffer_info *connect_buffer(pid_t pid, const char *bufname) ERR("problem in ustcomm_send_request(g_n_subbufs)"); return NULL; } + if(result == 0) { + goto error; + } result = sscanf(received_msg, "%d", &buf->n_subbufs); if(result != 1) { @@ -297,8 +314,15 @@ struct buffer_info *connect_buffer(pid_t pid, const char *bufname) /* get subbuf size */ asprintf(&send_msg, "get_subbuf_size %s", buf->name); - ustcomm_send_request(&buf->conn, send_msg, &received_msg); + result = ustcomm_send_request(&buf->conn, send_msg, &received_msg); free(send_msg); + if(result == -1) { + ERR("problem in ustcomm_send_request(get_subbuf_size)"); + return NULL; + } + if(result == 0) { + goto error; + } result = sscanf(received_msg, "%d", &buf->subbuf_size); if(result != 1) { @@ -370,6 +394,10 @@ struct buffer_info *connect_buffer(pid_t pid, const char *bufname) pthread_mutex_unlock(&active_buffers_mutex); return buf; + +error: + free(buf); + return NULL; } int write_current_subbuffer(struct buffer_info *buf)