@@ -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+
258266err_close_producer_socket :
259267 close (producer_socket );
260268
0 commit comments