fix segfault when both forwarding and output are enabled

fixes #556

Change-Id: I80179a55bb9bac5478ed70e445bd4e2b87dfaaa6
changes/91/21291/1
Richard Fuchs 7 years ago
parent 95a7cc6cfb
commit 78accdb639

@ -66,11 +66,9 @@ int forward_packet(metafile_t *mf, unsigned char *buf, unsigned len) {
goto err; goto err;
} }
free(buf);
return 0; return 0;
err: err:
free(buf);
return -1; return -1;
} }

@ -68,14 +68,18 @@ static void stream_handler(handler_t *handler) {
// got a packet // got a packet
pthread_mutex_unlock(&stream->lock); pthread_mutex_unlock(&stream->lock);
if (output_enabled)
packet_process(stream, buf, ret);
if (forward_to){ if (forward_to){
if (forward_packet(stream->metafile,buf,ret)) if (forward_packet(stream->metafile,buf,ret)) // leaves buf intact
g_atomic_int_inc(&stream->metafile->forward_failed); g_atomic_int_inc(&stream->metafile->forward_failed);
else else
g_atomic_int_inc(&stream->metafile->forward_count); g_atomic_int_inc(&stream->metafile->forward_count);
} }
if (output_enabled)
packet_process(stream, buf, ret); // consumes buf
else
free(buf);
log_info_call = NULL; log_info_call = NULL;
log_info_stream = NULL; log_info_stream = NULL;
return; return;

Loading…
Cancel
Save