X-Git-Url: http://git.liburcu.org/?a=blobdiff_plain;f=libustd%2Flibustd.c;h=47cb59499c32de3372c23ef2bc80bc4d2c775645;hb=f3f8cc914bc8fdf89e328ed591bd052a981c8298;hp=e0d48b589afdbd199bdd9f4bb343f0a2ad10196f;hpb=d159ac37826eaebf4c1d87b8db0c5e5a8ccc0b00;p=ust.git diff --git a/libustd/libustd.c b/libustd/libustd.c index e0d48b5..47cb594 100644 --- a/libustd/libustd.c +++ b/libustd/libustd.c @@ -58,7 +58,7 @@ int get_subbuffer(struct buffer_info *buf) int result; asprintf(&send_msg, "get_subbuffer %s", buf->name); - result = ustcomm_send_request(&buf->conn, send_msg, &received_msg); + result = ustcomm_send_request(buf->conn, send_msg, &received_msg); if((result == -1 && (errno == ECONNRESET || errno == EPIPE)) || result == 0) { DBG("app died while being traced"); retval = GET_SUBBUF_DIED; @@ -118,7 +118,7 @@ int put_subbuffer(struct buffer_info *buf) int result; asprintf(&send_msg, "put_subbuffer %s %ld", buf->name, buf->consumed_old); - result = ustcomm_send_request(&buf->conn, send_msg, &received_msg); + result = ustcomm_send_request(buf->conn, send_msg, &received_msg); if(result < 0 && (errno == ECONNRESET || errno == EPIPE)) { retval = PUT_SUBBUF_DIED; goto end; @@ -188,8 +188,6 @@ struct buffer_info *connect_buffer(struct libustd_instance *instance, pid_t pid, char *send_msg; char *received_msg; int result; - char *tmp; - int fd; struct shmid_ds shmds; buf = (struct buffer_info *) malloc(sizeof(struct buffer_info)); @@ -198,11 +196,18 @@ struct buffer_info *connect_buffer(struct libustd_instance *instance, pid_t pid, return NULL; } + buf->conn = malloc(sizeof(struct ustcomm_connection)); + if(buf->conn == NULL) { + ERR("add_buffer: insufficient memory"); + free(buf); + return NULL; + } + buf->name = bufname; buf->pid = pid; /* connect to app */ - result = ustcomm_connect_app(buf->pid, &buf->conn); + result = ustcomm_connect_app(buf->pid, buf->conn); if(result) { WARN("unable to connect to process, it probably died before we were able to connect"); return NULL; @@ -210,7 +215,7 @@ struct buffer_info *connect_buffer(struct libustd_instance *instance, pid_t pid, /* get pidunique */ asprintf(&send_msg, "get_pidunique"); - result = 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_pidunique)"); @@ -230,7 +235,7 @@ struct buffer_info *connect_buffer(struct libustd_instance *instance, pid_t pid, /* get shmid */ asprintf(&send_msg, "get_shmid %s", buf->name); - result = 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_shmid)"); @@ -250,7 +255,7 @@ struct buffer_info *connect_buffer(struct libustd_instance *instance, pid_t pid, /* get n_subbufs */ asprintf(&send_msg, "get_n_subbufs %s", buf->name); - result = 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(g_n_subbufs)"); @@ -270,7 +275,7 @@ struct buffer_info *connect_buffer(struct libustd_instance *instance, pid_t pid, /* get subbuf size */ asprintf(&send_msg, "get_subbuf_size %s", buf->name); - result = 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)"); @@ -330,7 +335,7 @@ static void destroy_buffer(struct libustd_callbacks *callbacks, { int result; - result = ustcomm_close_app(&buf->conn); + result = ustcomm_close_app(buf->conn); if(result == -1) { WARN("problem calling ustcomm_close_app"); } @@ -348,6 +353,7 @@ static void destroy_buffer(struct libustd_callbacks *callbacks, if(callbacks->on_close_buffer) callbacks->on_close_buffer(callbacks, buf); + free(buf->conn); free(buf); } @@ -525,7 +531,7 @@ int libustd_start_instance(struct libustd_instance *instance) char *recvbuf; /* check for requests on our public socket */ - result = ustcomm_ustd_recv_message(&instance->comm, &recvbuf, NULL, timeout); + result = ustcomm_ustd_recv_message(instance->comm, &recvbuf, NULL, timeout); if(result == -1 && errno == EINTR) { /* Caught signal */ } @@ -588,10 +594,11 @@ int libustd_start_instance(struct libustd_instance *instance) void libustd_delete_instance(struct libustd_instance *instance) { if(instance->is_init) - ustcomm_fini_ustd(&instance->comm); + ustcomm_fini_ustd(instance->comm); pthread_mutex_destroy(&instance->mutex); free(instance->sock_path); + free(instance->comm); free(instance); } @@ -644,6 +651,12 @@ struct libustd_instance *libustd_new_instance( if(!instance) return NULL; + instance->comm = malloc(sizeof(struct ustcomm_ustd)); + if(!instance->comm) { + free(instance); + return NULL; + } + instance->callbacks = callbacks; instance->quit_program = 0; instance->is_init = 0; @@ -661,7 +674,7 @@ struct libustd_instance *libustd_new_instance( int libustd_init_instance(struct libustd_instance *instance) { int result; - result = ustcomm_init_ustd(&instance->comm, instance->sock_path); + result = ustcomm_init_ustd(instance->comm, instance->sock_path); if(result == -1) { ERR("failed to initialize socket"); return 1;