Skip to content

fix error handling in IPC common #833

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Oct 24, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 15 additions & 7 deletions test/common/ipc_common.c
Original file line number Diff line number Diff line change
Expand Up @@ -147,30 +147,35 @@ int run_consumer(int port, umf_memory_pool_ops_t *pool_ops, void *pool_params,
char *recv_buffer = calloc(1, MSG_SIZE);
if (!recv_buffer) {
fprintf(stderr, "[consumer] ERROR: out of memory\n");
goto err_umfMemoryPoolDestroy;
goto err_close_producer_socket;
}

// get the size of the IPC handle from the producer
size_t IPC_handle_size;
ssize_t recv_len = recv(producer_socket, recv_buffer, MSG_SIZE, 0);
if (recv_len < 0) {
fprintf(stderr, "[consumer] ERROR: recv() failed\n");
goto err_close_producer_socket;
goto err_free_recv_buffer;
}
IPC_handle_size = *(size_t *)recv_buffer;
fprintf(stderr, "[consumer] Got the size of the IPC handle: %zu\n",
IPC_handle_size);

// send confirmation to the producer (IPC handle size)
send(producer_socket, &IPC_handle_size, sizeof(IPC_handle_size), 0);
recv_len =
send(producer_socket, &IPC_handle_size, sizeof(IPC_handle_size), 0);
if (recv_len < 0) {
fprintf(stderr, "[consumer] ERROR: sending confirmation failed\n");
goto err_free_recv_buffer;
}
fprintf(stderr,
"[consumer] Send the confirmation (IPC handle size) to producer\n");

// receive IPC handle from the producer
recv_len = recv(producer_socket, recv_buffer, MSG_SIZE, 0);
if (recv_len < 0) {
fprintf(stderr, "[consumer] ERROR: recv() failed\n");
goto err_close_producer_socket;
goto err_free_recv_buffer;
}

size_t len = (size_t)recv_len;
Expand All @@ -179,7 +184,7 @@ int run_consumer(int port, umf_memory_pool_ops_t *pool_ops, void *pool_params,
"[consumer] ERROR: recv() received a wrong number of bytes "
"(%zi != %zu expected)\n",
len, IPC_handle_size);
goto err_close_producer_socket;
goto err_free_recv_buffer;
}

void *IPC_handle = recv_buffer;
Expand All @@ -203,11 +208,11 @@ int run_consumer(int port, umf_memory_pool_ops_t *pool_ops, void *pool_params,
send(producer_socket, consumer_message, strlen(consumer_message) + 1,
0);

goto err_close_producer_socket;
goto err_free_recv_buffer;
}
if (umf_result != UMF_RESULT_SUCCESS) {
fprintf(stderr, "[consumer] ERROR: opening the IPC handle failed\n");
goto err_close_producer_socket;
goto err_free_recv_buffer;
}

fprintf(stderr,
Expand Down Expand Up @@ -255,6 +260,9 @@ int run_consumer(int port, umf_memory_pool_ops_t *pool_ops, void *pool_params,
fprintf(stderr,
"[consumer] Closed the IPC handle received from the producer\n");

err_free_recv_buffer:
free(recv_buffer);

err_close_producer_socket:
close(producer_socket);

Expand Down
Loading