@@ -147,30 +147,35 @@ int run_consumer(int port, umf_memory_pool_ops_t *pool_ops, void *pool_params,
147
147
char * recv_buffer = calloc (1 , MSG_SIZE );
148
148
if (!recv_buffer ) {
149
149
fprintf (stderr , "[consumer] ERROR: out of memory\n" );
150
- goto err_umfMemoryPoolDestroy ;
150
+ goto err_close_producer_socket ;
151
151
}
152
152
153
153
// get the size of the IPC handle from the producer
154
154
size_t IPC_handle_size ;
155
155
ssize_t recv_len = recv (producer_socket , recv_buffer , MSG_SIZE , 0 );
156
156
if (recv_len < 0 ) {
157
157
fprintf (stderr , "[consumer] ERROR: recv() failed\n" );
158
- goto err_close_producer_socket ;
158
+ goto err_free_recv_buffer ;
159
159
}
160
160
IPC_handle_size = * (size_t * )recv_buffer ;
161
161
fprintf (stderr , "[consumer] Got the size of the IPC handle: %zu\n" ,
162
162
IPC_handle_size );
163
163
164
164
// 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
+ }
166
171
fprintf (stderr ,
167
172
"[consumer] Send the confirmation (IPC handle size) to producer\n" );
168
173
169
174
// receive IPC handle from the producer
170
175
recv_len = recv (producer_socket , recv_buffer , MSG_SIZE , 0 );
171
176
if (recv_len < 0 ) {
172
177
fprintf (stderr , "[consumer] ERROR: recv() failed\n" );
173
- goto err_close_producer_socket ;
178
+ goto err_free_recv_buffer ;
174
179
}
175
180
176
181
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,
179
184
"[consumer] ERROR: recv() received a wrong number of bytes "
180
185
"(%zi != %zu expected)\n" ,
181
186
len , IPC_handle_size );
182
- goto err_close_producer_socket ;
187
+ goto err_free_recv_buffer ;
183
188
}
184
189
185
190
void * IPC_handle = recv_buffer ;
@@ -203,11 +208,11 @@ int run_consumer(int port, umf_memory_pool_ops_t *pool_ops, void *pool_params,
203
208
send (producer_socket , consumer_message , strlen (consumer_message ) + 1 ,
204
209
0 );
205
210
206
- goto err_close_producer_socket ;
211
+ goto err_free_recv_buffer ;
207
212
}
208
213
if (umf_result != UMF_RESULT_SUCCESS ) {
209
214
fprintf (stderr , "[consumer] ERROR: opening the IPC handle failed\n" );
210
- goto err_close_producer_socket ;
215
+ goto err_free_recv_buffer ;
211
216
}
212
217
213
218
fprintf (stderr ,
@@ -255,6 +260,9 @@ int run_consumer(int port, umf_memory_pool_ops_t *pool_ops, void *pool_params,
255
260
fprintf (stderr ,
256
261
"[consumer] Closed the IPC handle received from the producer\n" );
257
262
263
+ err_free_recv_buffer :
264
+ free (recv_buffer );
265
+
258
266
err_close_producer_socket :
259
267
close (producer_socket );
260
268
0 commit comments