Commit e9cc5c05 authored by Stéphane Borel's avatar Stéphane Borel

*fixed a double malloc/free bug in DVDRead

*fixed a lock issue in the interface introduced in my last commit
parent 1d066ee3
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
* -dvd_udf to find files * -dvd_udf to find files
***************************************************************************** *****************************************************************************
* Copyright (C) 1998-2001 VideoLAN * Copyright (C) 1998-2001 VideoLAN
* $Id: input_dvd.c,v 1.65 2001/05/31 03:57:54 sam Exp $ * $Id: input_dvd.c,v 1.66 2001/05/31 16:10:05 stef Exp $
* *
* Author: Stphane Borel <stef@via.ecp.fr> * Author: Stphane Borel <stef@via.ecp.fr>
* *
...@@ -96,6 +96,13 @@ ...@@ -96,6 +96,13 @@
#include "modules.h" #include "modules.h"
/* how many blocks DVDRead will read in each loop */
#define DVD_BLOCK_READ_ONCE 32
#define DVD_DATA_READ_ONCE 4*DVD_BLOCK_READ_ONCE
/* Size of netlist */
#define DVD_NETLIST_SIZE 2048
/***************************************************************************** /*****************************************************************************
* Local prototypes * Local prototypes
*****************************************************************************/ *****************************************************************************/
...@@ -223,11 +230,11 @@ static void DVDInit( input_thread_t * p_input ) ...@@ -223,11 +230,11 @@ static void DVDInit( input_thread_t * p_input )
p_dvd->i_fd = p_input->i_handle; p_dvd->i_fd = p_input->i_handle;
/* reading several block once seems to cause lock-up /* We read DVD_BLOCK_READ_ONCE in each loop, so the input will receive
* when using input_ToggleES * DVD_DATA_READ_ONCE at most */
* who wrote thez damn buggy piece of shit ??? --stef */ p_dvd->i_block_once = DVD_BLOCK_READ_ONCE;
p_dvd->i_block_once = 32; /* this value mustn't be modifed */
p_input->i_read_once = 128; p_input->i_read_once = DVD_DATA_READ_ONCE;
i = CSSTest( p_input->i_handle ); i = CSSTest( p_input->i_handle );
...@@ -249,7 +256,8 @@ static void DVDInit( input_thread_t * p_input ) ...@@ -249,7 +256,8 @@ static void DVDInit( input_thread_t * p_input )
/* Reading structures initialisation */ /* Reading structures initialisation */
p_input->p_method_data = p_input->p_method_data =
DVDNetlistInit( 2048, 4096, 2048, DVD_LB_SIZE, p_dvd->i_block_once ); DVDNetlistInit( DVD_NETLIST_SIZE, 2*DVD_NETLIST_SIZE,
DVD_NETLIST_SIZE, DVD_LB_SIZE, p_dvd->i_block_once );
intf_WarnMsg( 2, "dvd info: netlist initialized" ); intf_WarnMsg( 2, "dvd info: netlist initialized" );
/* Ifo allocation & initialisation */ /* Ifo allocation & initialisation */
...@@ -818,7 +826,7 @@ static int DVDRead( input_thread_t * p_input, ...@@ -818,7 +826,7 @@ static int DVDRead( input_thread_t * p_input,
thread_dvd_data_t * p_dvd; thread_dvd_data_t * p_dvd;
dvd_netlist_t * p_netlist; dvd_netlist_t * p_netlist;
struct iovec * p_vec; struct iovec * p_vec;
struct data_packet_s ** pp_data; struct data_packet_s * pp_data[DVD_DATA_READ_ONCE];
u8 * pi_cur; u8 * pi_cur;
int i_block_once; int i_block_once;
int i_packet_size; int i_packet_size;
...@@ -831,22 +839,6 @@ static int DVDRead( input_thread_t * p_input, ...@@ -831,22 +839,6 @@ static int DVDRead( input_thread_t * p_input,
boolean_t b_eof; boolean_t b_eof;
boolean_t b_eot; boolean_t b_eot;
pp_data = (struct data_packet_s **) malloc( p_input->i_read_once *
sizeof( struct data_packet_s * ) );
if( pp_data == NULL )
{
intf_ErrMsg( "dvd error: out of memory" );
return -1;
}
pp_data = (struct data_packet_s **) malloc( p_input->i_read_once *
sizeof( struct data_packet_s * ) );
if( pp_data == NULL )
{
intf_ErrMsg( "dvd error: out of memory" );
return -1;
}
p_dvd = (thread_dvd_data_t *)p_input->p_plugin_data; p_dvd = (thread_dvd_data_t *)p_input->p_plugin_data;
p_netlist = (dvd_netlist_t *)p_input->p_method_data; p_netlist = (dvd_netlist_t *)p_input->p_method_data;
...@@ -854,7 +846,6 @@ static int DVDRead( input_thread_t * p_input, ...@@ -854,7 +846,6 @@ static int DVDRead( input_thread_t * p_input,
if( ( p_vec = DVDGetiovec( p_netlist ) ) == NULL ) if( ( p_vec = DVDGetiovec( p_netlist ) ) == NULL )
{ {
intf_ErrMsg( "dvd error: can't get iovec" ); intf_ErrMsg( "dvd error: can't get iovec" );
free( pp_data );
return -1; return -1;
} }
...@@ -873,7 +864,6 @@ static int DVDRead( input_thread_t * p_input, ...@@ -873,7 +864,6 @@ static int DVDRead( input_thread_t * p_input,
{ {
pp_packets[0] = NULL; pp_packets[0] = NULL;
intf_ErrMsg( "dvd error: can't find next cell" ); intf_ErrMsg( "dvd error: can't find next cell" );
free( pp_data );
return 1; return 1;
} }
...@@ -980,7 +970,6 @@ static int DVDRead( input_thread_t * p_input, ...@@ -980,7 +970,6 @@ static int DVDRead( input_thread_t * p_input,
else else
{ {
intf_ErrMsg( "Unable to determine stream type" ); intf_ErrMsg( "Unable to determine stream type" );
free( pp_data );
return( -1 ); return( -1 );
} }
...@@ -1018,10 +1007,6 @@ static int DVDRead( input_thread_t * p_input, ...@@ -1018,10 +1007,6 @@ static int DVDRead( input_thread_t * p_input,
vlc_mutex_unlock( &p_input->stream.stream_lock ); vlc_mutex_unlock( &p_input->stream.stream_lock );
free( pp_data );
free( pp_data );
if( b_eof ) if( b_eof )
{ {
return 1; return 1;
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* gtk_callbacks.c : Callbacks for the Gtk+ plugin. * gtk_callbacks.c : Callbacks for the Gtk+ plugin.
***************************************************************************** *****************************************************************************
* Copyright (C) 2000, 2001 VideoLAN * Copyright (C) 2000, 2001 VideoLAN
* $Id: gtk_callbacks.c,v 1.23 2001/05/30 23:02:03 stef Exp $ * $Id: gtk_callbacks.c,v 1.24 2001/05/31 16:10:05 stef Exp $
* *
* Authors: Samuel Hocevar <sam@zoy.org> * Authors: Samuel Hocevar <sam@zoy.org>
* Stphane Borel <stef@via.ecp.fr> * Stphane Borel <stef@via.ecp.fr>
...@@ -205,7 +205,9 @@ void GtkTitlePrev( GtkButton * button, gpointer user_data ) ...@@ -205,7 +205,9 @@ void GtkTitlePrev( GtkButton * button, gpointer user_data )
input_SetStatus( p_intf->p_input, INPUT_STATUS_PLAY ); input_SetStatus( p_intf->p_input, INPUT_STATUS_PLAY );
p_intf->p_sys->b_title_update = 1; p_intf->p_sys->b_title_update = 1;
vlc_mutex_lock( &p_intf->p_input->stream.stream_lock );
GtkSetupMenus( p_intf ); GtkSetupMenus( p_intf );
vlc_mutex_unlock( &p_intf->p_input->stream.stream_lock );
} }
} }
...@@ -227,7 +229,9 @@ void GtkTitleNext( GtkButton * button, gpointer user_data ) ...@@ -227,7 +229,9 @@ void GtkTitleNext( GtkButton * button, gpointer user_data )
input_SetStatus( p_intf->p_input, INPUT_STATUS_PLAY ); input_SetStatus( p_intf->p_input, INPUT_STATUS_PLAY );
p_intf->p_sys->b_title_update = 1; p_intf->p_sys->b_title_update = 1;
vlc_mutex_lock( &p_intf->p_input->stream.stream_lock );
GtkSetupMenus( p_intf ); GtkSetupMenus( p_intf );
vlc_mutex_unlock( &p_intf->p_input->stream.stream_lock );
} }
} }
...@@ -249,7 +253,9 @@ void GtkChapterPrev( GtkButton * button, gpointer user_data ) ...@@ -249,7 +253,9 @@ void GtkChapterPrev( GtkButton * button, gpointer user_data )
input_SetStatus( p_intf->p_input, INPUT_STATUS_PLAY ); input_SetStatus( p_intf->p_input, INPUT_STATUS_PLAY );
p_intf->p_sys->b_chapter_update = 1; p_intf->p_sys->b_chapter_update = 1;
vlc_mutex_lock( &p_intf->p_input->stream.stream_lock );
GtkSetupMenus( p_intf ); GtkSetupMenus( p_intf );
vlc_mutex_unlock( &p_intf->p_input->stream.stream_lock );
} }
} }
...@@ -270,7 +276,9 @@ void GtkChapterNext( GtkButton * button, gpointer user_data ) ...@@ -270,7 +276,9 @@ void GtkChapterNext( GtkButton * button, gpointer user_data )
input_SetStatus( p_intf->p_input, INPUT_STATUS_PLAY ); input_SetStatus( p_intf->p_input, INPUT_STATUS_PLAY );
p_intf->p_sys->b_chapter_update = 1; p_intf->p_sys->b_chapter_update = 1;
vlc_mutex_lock( &p_intf->p_input->stream.stream_lock );
GtkSetupMenus( p_intf ); GtkSetupMenus( p_intf );
vlc_mutex_unlock( &p_intf->p_input->stream.stream_lock );
} }
} }
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* gtk_menu.c : functions to handle menu items. * gtk_menu.c : functions to handle menu items.
***************************************************************************** *****************************************************************************
* Copyright (C) 2000, 2001 VideoLAN * Copyright (C) 2000, 2001 VideoLAN
* $Id: gtk_menu.c,v 1.7 2001/05/30 23:02:04 stef Exp $ * $Id: gtk_menu.c,v 1.8 2001/05/31 16:10:05 stef Exp $
* *
* Authors: Samuel Hocevar <sam@zoy.org> * Authors: Samuel Hocevar <sam@zoy.org>
* Stphane Borel <stef@via.ecp.fr> * Stphane Borel <stef@via.ecp.fr>
...@@ -176,7 +176,9 @@ void GtkPopupNavigationToggle( GtkCheckMenuItem * menuitem, ...@@ -176,7 +176,9 @@ void GtkPopupNavigationToggle( GtkCheckMenuItem * menuitem,
input_ChangeArea( p_intf->p_input, (input_area_t*)p_area ); input_ChangeArea( p_intf->p_input, (input_area_t*)p_area );
p_intf->p_sys->b_chapter_update = 1; p_intf->p_sys->b_chapter_update = 1;
vlc_mutex_lock( &p_intf->p_input->stream.stream_lock );
GtkSetupMenus( p_intf ); GtkSetupMenus( p_intf );
vlc_mutex_unlock( &p_intf->p_input->stream.stream_lock );
input_SetStatus( p_intf->p_input, INPUT_STATUS_PLAY ); input_SetStatus( p_intf->p_input, INPUT_STATUS_PLAY );
} }
...@@ -197,7 +199,9 @@ void GtkMenubarTitleToggle( GtkCheckMenuItem * menuitem, gpointer user_data ) ...@@ -197,7 +199,9 @@ void GtkMenubarTitleToggle( GtkCheckMenuItem * menuitem, gpointer user_data )
p_intf->p_input->stream.pp_areas[i_title] ); p_intf->p_input->stream.pp_areas[i_title] );
p_intf->p_sys->b_title_update = 1; p_intf->p_sys->b_title_update = 1;
vlc_mutex_lock( &p_intf->p_input->stream.stream_lock );
GtkSetupMenus( p_intf ); GtkSetupMenus( p_intf );
vlc_mutex_unlock( &p_intf->p_input->stream.stream_lock );
p_intf->p_sys->b_title_update = 0; p_intf->p_sys->b_title_update = 0;
input_SetStatus( p_intf->p_input, INPUT_STATUS_PLAY ); input_SetStatus( p_intf->p_input, INPUT_STATUS_PLAY );
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* aout_spdif: ac3 passthrough output * aout_spdif: ac3 passthrough output
***************************************************************************** *****************************************************************************
* Copyright (C) 2001 VideoLAN * Copyright (C) 2001 VideoLAN
* $Id: aout_spdif.c,v 1.10 2001/05/31 03:12:49 sam Exp $ * $Id: aout_spdif.c,v 1.11 2001/05/31 16:10:05 stef Exp $
* *
* Authors: Michel Kaempf <maxx@via.ecp.fr> * Authors: Michel Kaempf <maxx@via.ecp.fr>
* Stphane Borel <stef@via.ecp.fr> * Stphane Borel <stef@via.ecp.fr>
...@@ -41,7 +41,7 @@ ...@@ -41,7 +41,7 @@
#include "audio_output.h" #include "audio_output.h"
#include "aout_common.h" #include "aout_common.h"
#define BLANK_FRAME_MAX 100 #define BLANK_FRAME_MAX 1000
#define SLEEP_TIME 16000 #define SLEEP_TIME 16000
/***************************************************************************** /*****************************************************************************
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment