X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Faccess%2Fjack.c;h=ba8804f732a3eeea612ae0ba30239b543f7ca8d5;hb=5f2b369ce56dd68a3278022bdc3e97518d140a7e;hp=d1b95dff709b08fd14e76e3c2c2d75fc1b7711b1;hpb=13ae40b0efc4f1b1ce205d9a057537047fcab3f4;p=vlc diff --git a/modules/access/jack.c b/modules/access/jack.c index d1b95dff70..ba8804f732 100644 --- a/modules/access/jack.c +++ b/modules/access/jack.c @@ -37,7 +37,7 @@ # include "config.h" #endif -#include +#include #include #include #include @@ -143,10 +143,7 @@ static int Open( vlc_object_t *p_this ) /* Allocate structure */ p_demux->p_sys = p_sys = calloc( 1, sizeof( demux_sys_t ) ); if( p_sys == NULL ) - { - msg_Err( p_demux, "out of memory, cannot allocate structure" ); return VLC_ENOMEM; - } memset( p_sys, 0, sizeof( demux_sys_t ) ); /* Parse MRL */ @@ -188,7 +185,8 @@ static int Open( vlc_object_t *p_this ) p_sys->i_channels * sizeof( jack_port_t* ) ); if( p_sys->pp_jack_port_input == NULL ) { - msg_Err( p_demux, "out of memory, cannot allocate input ports" ); + jack_client_close( p_sys->p_jack_client ); + free( p_sys ); return VLC_ENOMEM; } @@ -200,7 +198,9 @@ static int Open( vlc_object_t *p_this ) * sizeof( jack_default_audio_sample_t ) ); if( p_sys->p_jack_ringbuffer == NULL ) { - msg_Err( p_demux, "out of memory, cannot allocate ringbuffer" ); + free( p_sys->pp_jack_port_input ); + jack_client_close( p_sys->p_jack_client ); + free( p_sys ); return VLC_ENOMEM; } @@ -215,10 +215,9 @@ static int Open( vlc_object_t *p_this ) if( p_sys->pp_jack_port_input[i] == NULL ) { msg_Err( p_demux, "failed to register a JACK port" ); - if( p_sys->p_jack_client) jack_client_close( p_sys->p_jack_client ); + jack_ringbuffer_free( p_sys->p_jack_ringbuffer ); free( p_sys->pp_jack_port_input ); - if( p_sys->p_jack_ringbuffer ) jack_ringbuffer_free( p_sys->p_jack_ringbuffer ); - free( p_sys->pp_jack_buffer ); + jack_client_close( p_sys->p_jack_client ); free( p_sys ); return VLC_EGENERIC; } @@ -229,7 +228,12 @@ static int Open( vlc_object_t *p_this ) * sizeof( jack_default_audio_sample_t * ) ); if( p_sys->pp_jack_buffer == NULL ) { - msg_Err( p_demux, "out of memory, cannot allocate input buffer" ); + for( i = 0; i < p_sys->i_channels; i++ ) + jack_port_unregister( p_sys->p_jack_client, p_sys->pp_jack_port_input[i] ); + jack_ringbuffer_free( p_sys->p_jack_ringbuffer ); + free( p_sys->pp_jack_port_input ); + jack_client_close( p_sys->p_jack_client ); + free( p_sys ); return VLC_ENOMEM; } @@ -240,10 +244,12 @@ static int Open( vlc_object_t *p_this ) if ( jack_activate( p_sys->p_jack_client ) ) { msg_Err( p_demux, "failed to activate JACK client" ); - if( p_sys->p_jack_client) jack_client_close( p_sys->p_jack_client ); - free( p_sys->pp_jack_port_input ); - if( p_sys->p_jack_ringbuffer ) jack_ringbuffer_free( p_sys->p_jack_ringbuffer ); free( p_sys->pp_jack_buffer ); + for( i = 0; i < p_sys->i_channels; i++ ) + jack_port_unregister( p_sys->p_jack_client, p_sys->pp_jack_port_input[i] ); + jack_ringbuffer_free( p_sys->p_jack_ringbuffer ); + free( p_sys->pp_jack_port_input ); + jack_client_close( p_sys->p_jack_client ); free( p_sys ); return VLC_EGENERIC; } @@ -288,7 +294,7 @@ static int Open( vlc_object_t *p_this ) jack_port_name( p_sys->pp_jack_port_input[i_input_ports] ) ); } } - free( pp_jack_port_output ); + free( pp_jack_port_output ); } /* info about jack server */