Skip to content

Commit 77c6b72

Browse files
committed
fix error handling in IPC common
1 parent 9e70ea0 commit 77c6b72

File tree

1 file changed

+15
-7
lines changed

1 file changed

+15
-7
lines changed

test/common/ipc_common.c

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -147,30 +147,35 @@ int run_consumer(int port, umf_memory_pool_ops_t *pool_ops, void *pool_params,
147147
char *recv_buffer = calloc(1, MSG_SIZE);
148148
if (!recv_buffer) {
149149
fprintf(stderr, "[consumer] ERROR: out of memory\n");
150-
goto err_umfMemoryPoolDestroy;
150+
goto err_close_producer_socket;
151151
}
152152

153153
// get the size of the IPC handle from the producer
154154
size_t IPC_handle_size;
155155
ssize_t recv_len = recv(producer_socket, recv_buffer, MSG_SIZE, 0);
156156
if (recv_len < 0) {
157157
fprintf(stderr, "[consumer] ERROR: recv() failed\n");
158-
goto err_close_producer_socket;
158+
goto err_free_recv_buffer;
159159
}
160160
IPC_handle_size = *(size_t *)recv_buffer;
161161
fprintf(stderr, "[consumer] Got the size of the IPC handle: %zu\n",
162162
IPC_handle_size);
163163

164164
// send confirmation to the producer (IPC handle size)
165-
send(producer_socket, &IPC_handle_size, sizeof(IPC_handle_size), 0);
165+
recv_len =
166+
send(producer_socket, &IPC_handle_size, sizeof(IPC_handle_size), 0);
167+
if (recv_len < 0) {
168+
fprintf(stderr, "[consumer] ERROR: sending confirmation failed\n");
169+
goto err_free_recv_buffer;
170+
}
166171
fprintf(stderr,
167172
"[consumer] Send the confirmation (IPC handle size) to producer\n");
168173

169174
// receive IPC handle from the producer
170175
recv_len = recv(producer_socket, recv_buffer, MSG_SIZE, 0);
171176
if (recv_len < 0) {
172177
fprintf(stderr, "[consumer] ERROR: recv() failed\n");
173-
goto err_close_producer_socket;
178+
goto err_free_recv_buffer;
174179
}
175180

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

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

206-
goto err_close_producer_socket;
211+
goto err_free_recv_buffer;
207212
}
208213
if (umf_result != UMF_RESULT_SUCCESS) {
209214
fprintf(stderr, "[consumer] ERROR: opening the IPC handle failed\n");
210-
goto err_close_producer_socket;
215+
goto err_free_recv_buffer;
211216
}
212217

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

263+
err_free_recv_buffer:
264+
free(recv_buffer);
265+
258266
err_close_producer_socket:
259267
close(producer_socket);
260268

0 commit comments

Comments
 (0)