* ./include/vlc_threads.h, ./src/misc/threads.c: improved the cond_wait

implementation to avoid races, by using SetEvent instead of PulseEvent.
This commit is contained in:
Sam Hocevar 2002-06-08 14:08:46 +00:00
parent ece55c8fc2
commit 8fbbb9594a
12 changed files with 374 additions and 289 deletions

View File

@ -1,7 +1,7 @@
#! /bin/sh
## bootstrap.sh file for vlc, the VideoLAN Client
## $Id: bootstrap.sh,v 1.4 2002/06/07 14:30:40 sam Exp $
## $Id: bootstrap.sh,v 1.5 2002/06/08 14:08:46 sam Exp $
##
## Authors: Samuel Hocevar <sam@zoy.org>
@ -35,12 +35,12 @@ echo '' >> $file
echo 'struct module_symbols_s' >> $file
echo '{' >> $file
cat include/*.h | grep '^ *VLC_EXPORT.*;' | \
sed 's/VLC_EXPORT( *\([^,]*\), *\([^,]*\), *\(.*\));.*/ \1 (* \2_inner) \3;/' >> $file
sed 's/VLC_EXPORT( *\([^,]*\), *\([^,]*\), *\(.*\));.*/ \1 (* \2_inner) \3;/' | sort >> $file
echo '};' >> $file
echo '' >> $file
echo '#ifdef __PLUGIN__' >> $file
cat include/*.h | grep '^ *VLC_EXPORT.*;' | \
sed 's/VLC_EXPORT( *\([^,]*\), *\([^,]*\), *\(.*\));.*/# define \2 p_symbols->\2_inner/' >> $file
sed 's/VLC_EXPORT( *\([^,]*\), *\([^,]*\), *\(.*\));.*/# define \2 p_symbols->\2_inner/' | sort >> $file
echo '#endif /* __PLUGIN__ */' >> $file
echo '' >> $file
echo "$file."

View File

@ -3,269 +3,269 @@
struct module_symbols_s
{
aout_fifo_t * (* __aout_CreateFifo_inner) ( vlc_object_t *, int, int, int, int, void * ) ;
void (* aout_DestroyFifo_inner) ( aout_fifo_t *p_fifo ) ;
int (* __config_GetInt_inner) (vlc_object_t *, const char *) ;
void (* __config_PutInt_inner) (vlc_object_t *, const char *, int) ;
float (* __config_GetFloat_inner) (vlc_object_t *, const char *) ;
void (* __config_PutFloat_inner) (vlc_object_t *, const char *, float) ;
char * (* __config_GetPsz_inner) (vlc_object_t *, const char *) ;
void (* __config_PutPsz_inner) (vlc_object_t *, const char *, char *) ;
int (* __config_LoadCmdLine_inner) ( vlc_object_t *, int *, char *[], vlc_bool_t ) ;
char * (* config_GetHomeDir_inner) ( void ) ;
char * (* input_OffsetToTime_inner) ( input_thread_t *, char *, off_t ) ;
char * (* mstrtime_inner) ( char *psz_buffer, mtime_t date ) ;
const char * (* DecodeLanguage_inner) ( u16 ) ;
const iso639_lang_t * (* GetLang_1_inner) ( const char * ) ;
const iso639_lang_t * (* GetLang_2B_inner) ( const char * ) ;
const iso639_lang_t * (* GetLang_2T_inner) ( const char * ) ;
data_buffer_t * (* input_NewBuffer_inner) ( input_buffers_t *, size_t ) ;
data_packet_t * (* input_NewPacket_inner) ( input_buffers_t *, size_t ) ;
data_packet_t * (* input_ShareBuffer_inner) ( input_buffers_t *, data_buffer_t * ) ;
es_descriptor_t * (* input_AddES_inner) ( input_thread_t *, pgrm_descriptor_t *, u16, size_t ) ;
es_descriptor_t * (* input_FindES_inner) ( input_thread_t *, u16 ) ;
es_descriptor_t * (* input_ParsePS_inner) ( input_thread_t *, data_packet_t * ) ;
float (* __config_GetFloat_inner) (vlc_object_t *, const char *) ;
input_area_t * (* input_AddArea_inner) ( input_thread_t * ) ;
int (* __config_GetInt_inner) (vlc_object_t *, const char *) ;
int (* __config_LoadCmdLine_inner) ( vlc_object_t *, int *, char *[], vlc_bool_t ) ;
int (* __config_LoadConfigFile_inner) ( vlc_object_t *, const char * ) ;
int (* __config_SaveConfigFile_inner) ( vlc_object_t *, const char * ) ;
int (* __intf_Eject_inner) ( vlc_object_t *, const char * ) ;
int (* __network_ChannelCreate_inner) ( vlc_object_t * ) ;
int (* __network_ChannelJoin_inner) ( vlc_object_t *, int ) ;
int (* __vlc_cond_destroy_inner) ( char *, int, vlc_cond_t * ) ;
int (* __vlc_cond_init_inner) ( vlc_object_t *, vlc_cond_t * ) ;
int (* __vlc_mutex_destroy_inner) ( char *, int, vlc_mutex_t * ) ;
int (* __vlc_mutex_init_inner) ( vlc_object_t *, vlc_mutex_t * ) ;
int (* __vlc_thread_create_inner) ( vlc_object_t *, char *, int, char *, void * ( * ) ( void * ), vlc_bool_t ) ;
int (* __vlc_threads_init_inner) ( vlc_object_t * ) ;
int (* input_AccessInit_inner) ( input_thread_t * ) ;
int (* input_ChangeArea_inner) ( input_thread_t *, input_area_t * ) ;
int (* input_ChangeES_inner) ( input_thread_t *, es_descriptor_t *, u8 ) ;
int (* input_ChangeProgram_inner) ( input_thread_t *, u16 ) ;
int (* input_ClockManageControl_inner) ( input_thread_t *, pgrm_descriptor_t *, mtime_t ) ;
int (* input_InitStream_inner) ( input_thread_t *, size_t ) ;
int (* input_SelectES_inner) ( input_thread_t *, es_descriptor_t * ) ;
int (* input_SetProgram_inner) ( input_thread_t *, pgrm_descriptor_t * ) ;
int (* input_ToggleES_inner) ( input_thread_t *, es_descriptor_t *, vlc_bool_t ) ;
int (* input_UnselectES_inner) ( input_thread_t *, es_descriptor_t * ) ;
int (* playlist_Add_inner) ( playlist_t *, const char *, int, int ) ;
int (* playlist_Delete_inner) ( playlist_t *, int ) ;
int (* vlc_threads_end_inner) ( void ) ;
int (* vout_ChromaCmp_inner) ( u32, u32 ) ;
module_config_t * (* config_FindConfig_inner) ( vlc_object_t *, const char *psz_name ) ;
module_t * (* __module_Need_inner) ( vlc_object_t *, int, char *, void * ) ;
msg_subscription_t* (* __msg_Subscribe_inner) ( vlc_object_t * ) ;
mtime_t (* input_ClockGetTS_inner) ( input_thread_t *, pgrm_descriptor_t *, mtime_t ) ;
mtime_t (* mdate_inner) ( void ) ;
pes_packet_t * (* input_NewPES_inner) ( input_buffers_t * ) ;
pgrm_descriptor_t * (* input_AddProgram_inner) ( input_thread_t *, u16, size_t ) ;
pgrm_descriptor_t * (* input_FindProgram_inner) ( input_thread_t *, u16 ) ;
picture_t * (* vout_CreatePicture_inner) ( vout_thread_t *, vlc_bool_t, vlc_bool_t, vlc_bool_t ) ;
ssize_t (* input_FDNetworkRead_inner) ( input_thread_t *, byte_t *, size_t ) ;
ssize_t (* input_FDRead_inner) ( input_thread_t *, byte_t *, size_t ) ;
ssize_t (* input_FillBuffer_inner) ( input_thread_t * ) ;
ssize_t (* input_Peek_inner) ( input_thread_t *, byte_t **, size_t ) ;
ssize_t (* input_ReadPS_inner) ( input_thread_t *, data_packet_t ** ) ;
ssize_t (* input_ReadTS_inner) ( input_thread_t *, data_packet_t ** ) ;
ssize_t (* input_SplitBuffer_inner) ( input_thread_t *, data_packet_t **, size_t ) ;
subpicture_t * (* vout_CreateSubPicture_inner) ( vout_thread_t *, int, int ) ;
u32 (* UnalignedGetBits_inner) ( bit_stream_t *, unsigned int ) ;
u32 (* UnalignedShowBits_inner) ( bit_stream_t *, unsigned int ) ;
vlc_bool_t (* NextDataPacket_inner) ( decoder_fifo_t *, data_packet_t ** ) ;
void (* BitstreamNextDataPacket_inner) ( bit_stream_t * ) ;
void (* CurrentPTS_inner) ( bit_stream_t *, mtime_t *, mtime_t * ) ;
void (* DecoderError_inner) ( decoder_fifo_t * p_fifo ) ;
void (* InitBitstream_inner) ( bit_stream_t *, decoder_fifo_t *, void ( * )( bit_stream_t *, vlc_bool_t ), void * p_callback_arg ) ;
void (* UnalignedRemoveBits_inner) ( bit_stream_t * ) ;
void (* __config_PutFloat_inner) (vlc_object_t *, const char *, float) ;
void (* __config_PutInt_inner) (vlc_object_t *, const char *, int) ;
void (* __config_PutPsz_inner) (vlc_object_t *, const char *, char *) ;
void (* __input_Seek_inner) ( vlc_object_t *, off_t, int ) ;
void (* __input_SetStatus_inner) ( vlc_object_t *, int ) ;
void (* __input_Tell_inner) ( vlc_object_t *, stream_position_t * ) ;
void (* __msg_Dbg_inner) ( void *, const char *, ... ) ;
void (* __msg_Err_inner) ( void *, const char *, ... ) ;
void (* __msg_Generic_inner) ( vlc_object_t *, int, const char *, const char *, ... ) ;
void (* __msg_Info_inner) ( void *, const char *, ... ) ;
void (* __msg_Unsubscribe_inner) ( vlc_object_t *, msg_subscription_t * ) ;
void (* __msg_Warn_inner) ( void *, const char *, ... ) ;
void (* __vlc_dumpstructure_inner) ( vlc_object_t * ) ;
void (* __vlc_object_attach_inner) ( vlc_object_t *, vlc_object_t * ) ;
void (* __vlc_object_destroy_inner) ( vlc_object_t * ) ;
void (* __vlc_object_detach_all_inner) ( vlc_object_t * ) ;
void (* __vlc_object_detach_inner) ( vlc_object_t *, vlc_object_t * ) ;
void (* __vlc_object_release_inner) ( vlc_object_t * ) ;
void (* __vlc_object_yield_inner) ( vlc_object_t * ) ;
void (* __vlc_thread_join_inner) ( vlc_object_t *, char *, int ) ;
void (* __vlc_thread_ready_inner) ( vlc_object_t * ) ;
void (* aout_DestroyFifo_inner) ( aout_fifo_t *p_fifo ) ;
void (* config_Duplicate_inner) ( module_t *, module_config_t * ) ;
void (* config_SetCallbacks_inner) ( module_config_t *, module_config_t * ) ;
void (* config_UnsetCallbacks_inner) ( module_config_t * ) ;
void (* InitBitstream_inner) ( bit_stream_t *, decoder_fifo_t *, void ( * )( bit_stream_t *, vlc_bool_t ), void * p_callback_arg ) ;
vlc_bool_t (* NextDataPacket_inner) ( decoder_fifo_t *, data_packet_t ** ) ;
void (* BitstreamNextDataPacket_inner) ( bit_stream_t * ) ;
u32 (* UnalignedShowBits_inner) ( bit_stream_t *, unsigned int ) ;
void (* UnalignedRemoveBits_inner) ( bit_stream_t * ) ;
u32 (* UnalignedGetBits_inner) ( bit_stream_t *, unsigned int ) ;
void (* CurrentPTS_inner) ( bit_stream_t *, mtime_t *, mtime_t * ) ;
void (* DecoderError_inner) ( decoder_fifo_t * p_fifo ) ;
void (* __input_SetStatus_inner) ( vlc_object_t *, int ) ;
void (* __input_Seek_inner) ( vlc_object_t *, off_t, int ) ;
void (* __input_Tell_inner) ( vlc_object_t *, stream_position_t * ) ;
void (* input_DumpStream_inner) ( input_thread_t * ) ;
char * (* input_OffsetToTime_inner) ( input_thread_t *, char *, off_t ) ;
int (* input_ChangeES_inner) ( input_thread_t *, es_descriptor_t *, u8 ) ;
int (* input_ToggleES_inner) ( input_thread_t *, es_descriptor_t *, vlc_bool_t ) ;
int (* input_ChangeArea_inner) ( input_thread_t *, input_area_t * ) ;
int (* input_ChangeProgram_inner) ( input_thread_t *, u16 ) ;
int (* input_InitStream_inner) ( input_thread_t *, size_t ) ;
void (* input_EndStream_inner) ( input_thread_t * ) ;
pgrm_descriptor_t * (* input_FindProgram_inner) ( input_thread_t *, u16 ) ;
pgrm_descriptor_t * (* input_AddProgram_inner) ( input_thread_t *, u16, size_t ) ;
void (* input_DelProgram_inner) ( input_thread_t *, pgrm_descriptor_t * ) ;
int (* input_SetProgram_inner) ( input_thread_t *, pgrm_descriptor_t * ) ;
input_area_t * (* input_AddArea_inner) ( input_thread_t * ) ;
void (* input_DelArea_inner) ( input_thread_t *, input_area_t * ) ;
es_descriptor_t * (* input_FindES_inner) ( input_thread_t *, u16 ) ;
es_descriptor_t * (* input_AddES_inner) ( input_thread_t *, pgrm_descriptor_t *, u16, size_t ) ;
void (* input_DelES_inner) ( input_thread_t *, es_descriptor_t * ) ;
int (* input_SelectES_inner) ( input_thread_t *, es_descriptor_t * ) ;
int (* input_UnselectES_inner) ( input_thread_t *, es_descriptor_t * ) ;
void (* input_DecodePES_inner) ( decoder_fifo_t *, pes_packet_t * ) ;
int (* input_ClockManageControl_inner) ( input_thread_t *, pgrm_descriptor_t *, mtime_t ) ;
void (* input_ClockManageRef_inner) ( input_thread_t *, pgrm_descriptor_t *, mtime_t ) ;
mtime_t (* input_ClockGetTS_inner) ( input_thread_t *, pgrm_descriptor_t *, mtime_t ) ;
void (* input_BuffersEnd_inner) ( input_thread_t *, input_buffers_t * ) ;
data_buffer_t * (* input_NewBuffer_inner) ( input_buffers_t *, size_t ) ;
void (* input_ReleaseBuffer_inner) ( input_buffers_t *, data_buffer_t * ) ;
data_packet_t * (* input_ShareBuffer_inner) ( input_buffers_t *, data_buffer_t * ) ;
data_packet_t * (* input_NewPacket_inner) ( input_buffers_t *, size_t ) ;
void (* input_DeletePacket_inner) ( input_buffers_t *, data_packet_t * ) ;
pes_packet_t * (* input_NewPES_inner) ( input_buffers_t * ) ;
void (* input_DeletePES_inner) ( input_buffers_t *, pes_packet_t * ) ;
ssize_t (* input_FillBuffer_inner) ( input_thread_t * ) ;
ssize_t (* input_Peek_inner) ( input_thread_t *, byte_t **, size_t ) ;
ssize_t (* input_SplitBuffer_inner) ( input_thread_t *, data_packet_t **, size_t ) ;
int (* input_AccessInit_inner) ( input_thread_t * ) ;
void (* input_AccessReinit_inner) ( input_thread_t * ) ;
void (* input_AccessEnd_inner) ( input_thread_t * ) ;
void (* input_ParsePES_inner) ( input_thread_t *, es_descriptor_t * ) ;
void (* input_GatherPES_inner) ( input_thread_t *, data_packet_t *, es_descriptor_t *, vlc_bool_t, vlc_bool_t ) ;
ssize_t (* input_ReadPS_inner) ( input_thread_t *, data_packet_t ** ) ;
es_descriptor_t * (* input_ParsePS_inner) ( input_thread_t *, data_packet_t * ) ;
ssize_t (* input_ReadTS_inner) ( input_thread_t *, data_packet_t ** ) ;
void (* input_AccessReinit_inner) ( input_thread_t * ) ;
void (* input_BuffersEnd_inner) ( input_thread_t *, input_buffers_t * ) ;
void (* input_ClockManageRef_inner) ( input_thread_t *, pgrm_descriptor_t *, mtime_t ) ;
void (* input_DecodePES_inner) ( decoder_fifo_t *, pes_packet_t * ) ;
void (* input_DelArea_inner) ( input_thread_t *, input_area_t * ) ;
void (* input_DelES_inner) ( input_thread_t *, es_descriptor_t * ) ;
void (* input_DelProgram_inner) ( input_thread_t *, pgrm_descriptor_t * ) ;
void (* input_DeletePES_inner) ( input_buffers_t *, pes_packet_t * ) ;
void (* input_DeletePacket_inner) ( input_buffers_t *, data_packet_t * ) ;
void (* input_DemuxPS_inner) ( input_thread_t *, data_packet_t * ) ;
void (* input_DemuxTS_inner) ( input_thread_t *, data_packet_t *, void(*) ( input_thread_t *, data_packet_t *, es_descriptor_t *, vlc_bool_t ) ) ;
void (* input_DumpStream_inner) ( input_thread_t * ) ;
void (* input_EndStream_inner) ( input_thread_t * ) ;
void (* input_FDClose_inner) ( input_thread_t * ) ;
void (* input_FDNetworkClose_inner) ( input_thread_t * ) ;
ssize_t (* input_FDRead_inner) ( input_thread_t *, byte_t *, size_t ) ;
ssize_t (* input_FDNetworkRead_inner) ( input_thread_t *, byte_t *, size_t ) ;
void (* input_FDSeek_inner) ( input_thread_t *, off_t ) ;
int (* __intf_Eject_inner) ( vlc_object_t *, const char * ) ;
const iso639_lang_t * (* GetLang_1_inner) ( const char * ) ;
const iso639_lang_t * (* GetLang_2T_inner) ( const char * ) ;
const iso639_lang_t * (* GetLang_2B_inner) ( const char * ) ;
const char * (* DecodeLanguage_inner) ( u16 ) ;
module_t * (* __module_Need_inner) ( vlc_object_t *, int, char *, void * ) ;
void (* input_GatherPES_inner) ( input_thread_t *, data_packet_t *, es_descriptor_t *, vlc_bool_t, vlc_bool_t ) ;
void (* input_ParsePES_inner) ( input_thread_t *, es_descriptor_t * ) ;
void (* input_ReleaseBuffer_inner) ( input_buffers_t *, data_buffer_t * ) ;
void (* module_Unneed_inner) ( module_t * ) ;
char * (* mstrtime_inner) ( char *psz_buffer, mtime_t date ) ;
mtime_t (* mdate_inner) ( void ) ;
void (* mwait_inner) ( mtime_t date ) ;
void (* msleep_inner) ( mtime_t delay ) ;
int (* __network_ChannelJoin_inner) ( vlc_object_t *, int ) ;
int (* __network_ChannelCreate_inner) ( vlc_object_t * ) ;
void (* mwait_inner) ( mtime_t date ) ;
void (* playlist_Command_inner) ( playlist_t *, int, int ) ;
int (* playlist_Add_inner) ( playlist_t *, const char *, int, int ) ;
int (* playlist_Delete_inner) ( playlist_t *, int ) ;
vout_thread_t * (* __vout_CreateThread_inner) ( vlc_object_t *, int, int, u32, int ) ;
void (* vout_DestroyThread_inner) ( vout_thread_t * ) ;
int (* vout_ChromaCmp_inner) ( u32, u32 ) ;
picture_t * (* vout_CreatePicture_inner) ( vout_thread_t *, vlc_bool_t, vlc_bool_t, vlc_bool_t ) ;
void (* vout_AllocatePicture_inner) ( vout_thread_t *, picture_t *, int, int, u32 ) ;
void (* vout_DestroyPicture_inner) ( vout_thread_t *, picture_t * ) ;
void (* vout_DisplayPicture_inner) ( vout_thread_t *, picture_t * ) ;
void (* vout_DatePicture_inner) ( vout_thread_t *, picture_t *, mtime_t ) ;
void (* vout_LinkPicture_inner) ( vout_thread_t *, picture_t * ) ;
void (* vout_UnlinkPicture_inner) ( vout_thread_t *, picture_t * ) ;
void (* vout_PlacePicture_inner) ( vout_thread_t *, int, int, int *, int *, int *, int * ) ;
subpicture_t * (* vout_CreateSubPicture_inner) ( vout_thread_t *, int, int ) ;
void (* vout_DestroyPicture_inner) ( vout_thread_t *, picture_t * ) ;
void (* vout_DestroySubPicture_inner) ( vout_thread_t *, subpicture_t * ) ;
void (* vout_DestroyThread_inner) ( vout_thread_t * ) ;
void (* vout_DisplayPicture_inner) ( vout_thread_t *, picture_t * ) ;
void (* vout_DisplaySubPicture_inner) ( vout_thread_t *, subpicture_t * ) ;
void (* __msg_Generic_inner) ( vlc_object_t *, int, const char *, const char *, ... ) ;
void (* __msg_Info_inner) ( void *, const char *, ... ) ;
void (* __msg_Err_inner) ( void *, const char *, ... ) ;
void (* __msg_Warn_inner) ( void *, const char *, ... ) ;
void (* __msg_Dbg_inner) ( void *, const char *, ... ) ;
msg_subscription_t* (* __msg_Subscribe_inner) ( vlc_object_t * ) ;
void (* __msg_Unsubscribe_inner) ( vlc_object_t *, msg_subscription_t * ) ;
void (* vout_LinkPicture_inner) ( vout_thread_t *, picture_t * ) ;
void (* vout_PlacePicture_inner) ( vout_thread_t *, int, int, int *, int *, int *, int * ) ;
void (* vout_UnlinkPicture_inner) ( vout_thread_t *, picture_t * ) ;
void * (* __vlc_object_create_inner) ( vlc_object_t *, int ) ;
void (* __vlc_object_destroy_inner) ( vlc_object_t * ) ;
void * (* __vlc_object_find_inner) ( vlc_object_t *, int, int ) ;
void (* __vlc_object_yield_inner) ( vlc_object_t * ) ;
void (* __vlc_object_release_inner) ( vlc_object_t * ) ;
void (* __vlc_object_detach_inner) ( vlc_object_t *, vlc_object_t * ) ;
void (* __vlc_object_detach_all_inner) ( vlc_object_t * ) ;
void (* __vlc_object_attach_inner) ( vlc_object_t *, vlc_object_t * ) ;
void (* __vlc_dumpstructure_inner) ( vlc_object_t * ) ;
int (* __vlc_threads_init_inner) ( vlc_object_t * ) ;
int (* vlc_threads_end_inner) ( void ) ;
int (* __vlc_mutex_init_inner) ( vlc_object_t *, vlc_mutex_t * ) ;
int (* __vlc_mutex_destroy_inner) ( char *, int, vlc_mutex_t * ) ;
int (* vlc_cond_init_inner) ( vlc_cond_t * ) ;
int (* __vlc_cond_destroy_inner) ( char *, int, vlc_cond_t * ) ;
int (* __vlc_thread_create_inner) ( vlc_object_t *, char *, int, char *, void * ( * ) ( void * ), vlc_bool_t ) ;
void (* __vlc_thread_ready_inner) ( vlc_object_t * ) ;
void (* __vlc_thread_join_inner) ( vlc_object_t *, char *, int ) ;
vout_thread_t * (* __vout_CreateThread_inner) ( vlc_object_t *, int, int, u32, int ) ;
};
#ifdef __PLUGIN__
# define __aout_CreateFifo p_symbols->__aout_CreateFifo_inner
# define aout_DestroyFifo p_symbols->aout_DestroyFifo_inner
# define __config_GetInt p_symbols->__config_GetInt_inner
# define __config_PutInt p_symbols->__config_PutInt_inner
# define __config_GetFloat p_symbols->__config_GetFloat_inner
# define __config_PutFloat p_symbols->__config_PutFloat_inner
# define __config_GetPsz p_symbols->__config_GetPsz_inner
# define __config_PutPsz p_symbols->__config_PutPsz_inner
# define __config_LoadCmdLine p_symbols->__config_LoadCmdLine_inner
# define config_GetHomeDir p_symbols->config_GetHomeDir_inner
# define __config_LoadConfigFile p_symbols->__config_LoadConfigFile_inner
# define __config_SaveConfigFile p_symbols->__config_SaveConfigFile_inner
# define config_FindConfig p_symbols->config_FindConfig_inner
# define config_Duplicate p_symbols->config_Duplicate_inner
# define config_SetCallbacks p_symbols->config_SetCallbacks_inner
# define config_UnsetCallbacks p_symbols->config_UnsetCallbacks_inner
# define BitstreamNextDataPacket p_symbols->BitstreamNextDataPacket_inner
# define CurrentPTS p_symbols->CurrentPTS_inner
# define DecodeLanguage p_symbols->DecodeLanguage_inner
# define DecoderError p_symbols->DecoderError_inner
# define GetLang_1 p_symbols->GetLang_1_inner
# define GetLang_2B p_symbols->GetLang_2B_inner
# define GetLang_2T p_symbols->GetLang_2T_inner
# define InitBitstream p_symbols->InitBitstream_inner
# define NextDataPacket p_symbols->NextDataPacket_inner
# define BitstreamNextDataPacket p_symbols->BitstreamNextDataPacket_inner
# define UnalignedShowBits p_symbols->UnalignedShowBits_inner
# define UnalignedRemoveBits p_symbols->UnalignedRemoveBits_inner
# define UnalignedGetBits p_symbols->UnalignedGetBits_inner
# define CurrentPTS p_symbols->CurrentPTS_inner
# define DecoderError p_symbols->DecoderError_inner
# define __input_SetStatus p_symbols->__input_SetStatus_inner
# define UnalignedRemoveBits p_symbols->UnalignedRemoveBits_inner
# define UnalignedShowBits p_symbols->UnalignedShowBits_inner
# define __aout_CreateFifo p_symbols->__aout_CreateFifo_inner
# define __config_GetFloat p_symbols->__config_GetFloat_inner
# define __config_GetInt p_symbols->__config_GetInt_inner
# define __config_GetPsz p_symbols->__config_GetPsz_inner
# define __config_LoadCmdLine p_symbols->__config_LoadCmdLine_inner
# define __config_LoadConfigFile p_symbols->__config_LoadConfigFile_inner
# define __config_PutFloat p_symbols->__config_PutFloat_inner
# define __config_PutInt p_symbols->__config_PutInt_inner
# define __config_PutPsz p_symbols->__config_PutPsz_inner
# define __config_SaveConfigFile p_symbols->__config_SaveConfigFile_inner
# define __input_Seek p_symbols->__input_Seek_inner
# define __input_SetStatus p_symbols->__input_SetStatus_inner
# define __input_Tell p_symbols->__input_Tell_inner
# define input_DumpStream p_symbols->input_DumpStream_inner
# define input_OffsetToTime p_symbols->input_OffsetToTime_inner
# define input_ChangeES p_symbols->input_ChangeES_inner
# define input_ToggleES p_symbols->input_ToggleES_inner
# define input_ChangeArea p_symbols->input_ChangeArea_inner
# define input_ChangeProgram p_symbols->input_ChangeProgram_inner
# define input_InitStream p_symbols->input_InitStream_inner
# define input_EndStream p_symbols->input_EndStream_inner
# define input_FindProgram p_symbols->input_FindProgram_inner
# define input_AddProgram p_symbols->input_AddProgram_inner
# define input_DelProgram p_symbols->input_DelProgram_inner
# define input_SetProgram p_symbols->input_SetProgram_inner
# define input_AddArea p_symbols->input_AddArea_inner
# define input_DelArea p_symbols->input_DelArea_inner
# define input_FindES p_symbols->input_FindES_inner
# define input_AddES p_symbols->input_AddES_inner
# define input_DelES p_symbols->input_DelES_inner
# define input_SelectES p_symbols->input_SelectES_inner
# define input_UnselectES p_symbols->input_UnselectES_inner
# define input_DecodePES p_symbols->input_DecodePES_inner
# define input_ClockManageControl p_symbols->input_ClockManageControl_inner
# define input_ClockManageRef p_symbols->input_ClockManageRef_inner
# define input_ClockGetTS p_symbols->input_ClockGetTS_inner
# define input_BuffersEnd p_symbols->input_BuffersEnd_inner
# define input_NewBuffer p_symbols->input_NewBuffer_inner
# define input_ReleaseBuffer p_symbols->input_ReleaseBuffer_inner
# define input_ShareBuffer p_symbols->input_ShareBuffer_inner
# define input_NewPacket p_symbols->input_NewPacket_inner
# define input_DeletePacket p_symbols->input_DeletePacket_inner
# define input_NewPES p_symbols->input_NewPES_inner
# define input_DeletePES p_symbols->input_DeletePES_inner
# define input_FillBuffer p_symbols->input_FillBuffer_inner
# define input_Peek p_symbols->input_Peek_inner
# define input_SplitBuffer p_symbols->input_SplitBuffer_inner
# define input_AccessInit p_symbols->input_AccessInit_inner
# define input_AccessReinit p_symbols->input_AccessReinit_inner
# define input_AccessEnd p_symbols->input_AccessEnd_inner
# define input_ParsePES p_symbols->input_ParsePES_inner
# define input_GatherPES p_symbols->input_GatherPES_inner
# define input_ReadPS p_symbols->input_ReadPS_inner
# define input_ParsePS p_symbols->input_ParsePS_inner
# define input_ReadTS p_symbols->input_ReadTS_inner
# define input_DemuxPS p_symbols->input_DemuxPS_inner
# define input_DemuxTS p_symbols->input_DemuxTS_inner
# define input_FDClose p_symbols->input_FDClose_inner
# define input_FDNetworkClose p_symbols->input_FDNetworkClose_inner
# define input_FDRead p_symbols->input_FDRead_inner
# define input_FDNetworkRead p_symbols->input_FDNetworkRead_inner
# define input_FDSeek p_symbols->input_FDSeek_inner
# define __intf_Eject p_symbols->__intf_Eject_inner
# define GetLang_1 p_symbols->GetLang_1_inner
# define GetLang_2T p_symbols->GetLang_2T_inner
# define GetLang_2B p_symbols->GetLang_2B_inner
# define DecodeLanguage p_symbols->DecodeLanguage_inner
# define __module_Need p_symbols->__module_Need_inner
# define module_Unneed p_symbols->module_Unneed_inner
# define mstrtime p_symbols->mstrtime_inner
# define mdate p_symbols->mdate_inner
# define mwait p_symbols->mwait_inner
# define msleep p_symbols->msleep_inner
# define __network_ChannelJoin p_symbols->__network_ChannelJoin_inner
# define __network_ChannelCreate p_symbols->__network_ChannelCreate_inner
# define playlist_Command p_symbols->playlist_Command_inner
# define playlist_Add p_symbols->playlist_Add_inner
# define playlist_Delete p_symbols->playlist_Delete_inner
# define __vout_CreateThread p_symbols->__vout_CreateThread_inner
# define vout_DestroyThread p_symbols->vout_DestroyThread_inner
# define vout_ChromaCmp p_symbols->vout_ChromaCmp_inner
# define vout_CreatePicture p_symbols->vout_CreatePicture_inner
# define vout_AllocatePicture p_symbols->vout_AllocatePicture_inner
# define vout_DestroyPicture p_symbols->vout_DestroyPicture_inner
# define vout_DisplayPicture p_symbols->vout_DisplayPicture_inner
# define vout_DatePicture p_symbols->vout_DatePicture_inner
# define vout_LinkPicture p_symbols->vout_LinkPicture_inner
# define vout_UnlinkPicture p_symbols->vout_UnlinkPicture_inner
# define vout_PlacePicture p_symbols->vout_PlacePicture_inner
# define vout_CreateSubPicture p_symbols->vout_CreateSubPicture_inner
# define vout_DestroySubPicture p_symbols->vout_DestroySubPicture_inner
# define vout_DisplaySubPicture p_symbols->vout_DisplaySubPicture_inner
# define __msg_Dbg p_symbols->__msg_Dbg_inner
# define __msg_Err p_symbols->__msg_Err_inner
# define __msg_Generic p_symbols->__msg_Generic_inner
# define __msg_Info p_symbols->__msg_Info_inner
# define __msg_Err p_symbols->__msg_Err_inner
# define __msg_Warn p_symbols->__msg_Warn_inner
# define __msg_Dbg p_symbols->__msg_Dbg_inner
# define __msg_Subscribe p_symbols->__msg_Subscribe_inner
# define __msg_Unsubscribe p_symbols->__msg_Unsubscribe_inner
# define __msg_Warn p_symbols->__msg_Warn_inner
# define __network_ChannelCreate p_symbols->__network_ChannelCreate_inner
# define __network_ChannelJoin p_symbols->__network_ChannelJoin_inner
# define __vlc_cond_destroy p_symbols->__vlc_cond_destroy_inner
# define __vlc_cond_init p_symbols->__vlc_cond_init_inner
# define __vlc_dumpstructure p_symbols->__vlc_dumpstructure_inner
# define __vlc_mutex_destroy p_symbols->__vlc_mutex_destroy_inner
# define __vlc_mutex_init p_symbols->__vlc_mutex_init_inner
# define __vlc_object_attach p_symbols->__vlc_object_attach_inner
# define __vlc_object_create p_symbols->__vlc_object_create_inner
# define __vlc_object_destroy p_symbols->__vlc_object_destroy_inner
# define __vlc_object_find p_symbols->__vlc_object_find_inner
# define __vlc_object_yield p_symbols->__vlc_object_yield_inner
# define __vlc_object_release p_symbols->__vlc_object_release_inner
# define __vlc_object_detach p_symbols->__vlc_object_detach_inner
# define __vlc_object_detach_all p_symbols->__vlc_object_detach_all_inner
# define __vlc_object_attach p_symbols->__vlc_object_attach_inner
# define __vlc_dumpstructure p_symbols->__vlc_dumpstructure_inner
# define __vlc_threads_init p_symbols->__vlc_threads_init_inner
# define vlc_threads_end p_symbols->vlc_threads_end_inner
# define __vlc_mutex_init p_symbols->__vlc_mutex_init_inner
# define __vlc_mutex_destroy p_symbols->__vlc_mutex_destroy_inner
# define vlc_cond_init p_symbols->vlc_cond_init_inner
# define __vlc_cond_destroy p_symbols->__vlc_cond_destroy_inner
# define __vlc_object_find p_symbols->__vlc_object_find_inner
# define __vlc_object_release p_symbols->__vlc_object_release_inner
# define __vlc_object_yield p_symbols->__vlc_object_yield_inner
# define __vlc_thread_create p_symbols->__vlc_thread_create_inner
# define __vlc_thread_ready p_symbols->__vlc_thread_ready_inner
# define __vlc_thread_join p_symbols->__vlc_thread_join_inner
# define __vlc_thread_ready p_symbols->__vlc_thread_ready_inner
# define __vlc_threads_init p_symbols->__vlc_threads_init_inner
# define __vout_CreateThread p_symbols->__vout_CreateThread_inner
# define aout_DestroyFifo p_symbols->aout_DestroyFifo_inner
# define config_Duplicate p_symbols->config_Duplicate_inner
# define config_FindConfig p_symbols->config_FindConfig_inner
# define config_GetHomeDir p_symbols->config_GetHomeDir_inner
# define config_SetCallbacks p_symbols->config_SetCallbacks_inner
# define config_UnsetCallbacks p_symbols->config_UnsetCallbacks_inner
# define input_AccessEnd p_symbols->input_AccessEnd_inner
# define input_AccessInit p_symbols->input_AccessInit_inner
# define input_AccessReinit p_symbols->input_AccessReinit_inner
# define input_AddArea p_symbols->input_AddArea_inner
# define input_AddES p_symbols->input_AddES_inner
# define input_AddProgram p_symbols->input_AddProgram_inner
# define input_BuffersEnd p_symbols->input_BuffersEnd_inner
# define input_ChangeArea p_symbols->input_ChangeArea_inner
# define input_ChangeES p_symbols->input_ChangeES_inner
# define input_ChangeProgram p_symbols->input_ChangeProgram_inner
# define input_ClockGetTS p_symbols->input_ClockGetTS_inner
# define input_ClockManageControl p_symbols->input_ClockManageControl_inner
# define input_ClockManageRef p_symbols->input_ClockManageRef_inner
# define input_DecodePES p_symbols->input_DecodePES_inner
# define input_DelArea p_symbols->input_DelArea_inner
# define input_DelES p_symbols->input_DelES_inner
# define input_DelProgram p_symbols->input_DelProgram_inner
# define input_DeletePES p_symbols->input_DeletePES_inner
# define input_DeletePacket p_symbols->input_DeletePacket_inner
# define input_DemuxPS p_symbols->input_DemuxPS_inner
# define input_DemuxTS p_symbols->input_DemuxTS_inner
# define input_DumpStream p_symbols->input_DumpStream_inner
# define input_EndStream p_symbols->input_EndStream_inner
# define input_FDClose p_symbols->input_FDClose_inner
# define input_FDNetworkClose p_symbols->input_FDNetworkClose_inner
# define input_FDNetworkRead p_symbols->input_FDNetworkRead_inner
# define input_FDRead p_symbols->input_FDRead_inner
# define input_FDSeek p_symbols->input_FDSeek_inner
# define input_FillBuffer p_symbols->input_FillBuffer_inner
# define input_FindES p_symbols->input_FindES_inner
# define input_FindProgram p_symbols->input_FindProgram_inner
# define input_GatherPES p_symbols->input_GatherPES_inner
# define input_InitStream p_symbols->input_InitStream_inner
# define input_NewBuffer p_symbols->input_NewBuffer_inner
# define input_NewPES p_symbols->input_NewPES_inner
# define input_NewPacket p_symbols->input_NewPacket_inner
# define input_OffsetToTime p_symbols->input_OffsetToTime_inner
# define input_ParsePES p_symbols->input_ParsePES_inner
# define input_ParsePS p_symbols->input_ParsePS_inner
# define input_Peek p_symbols->input_Peek_inner
# define input_ReadPS p_symbols->input_ReadPS_inner
# define input_ReadTS p_symbols->input_ReadTS_inner
# define input_ReleaseBuffer p_symbols->input_ReleaseBuffer_inner
# define input_SelectES p_symbols->input_SelectES_inner
# define input_SetProgram p_symbols->input_SetProgram_inner
# define input_ShareBuffer p_symbols->input_ShareBuffer_inner
# define input_SplitBuffer p_symbols->input_SplitBuffer_inner
# define input_ToggleES p_symbols->input_ToggleES_inner
# define input_UnselectES p_symbols->input_UnselectES_inner
# define mdate p_symbols->mdate_inner
# define module_Unneed p_symbols->module_Unneed_inner
# define msleep p_symbols->msleep_inner
# define mstrtime p_symbols->mstrtime_inner
# define mwait p_symbols->mwait_inner
# define playlist_Add p_symbols->playlist_Add_inner
# define playlist_Command p_symbols->playlist_Command_inner
# define playlist_Delete p_symbols->playlist_Delete_inner
# define vlc_threads_end p_symbols->vlc_threads_end_inner
# define vout_AllocatePicture p_symbols->vout_AllocatePicture_inner
# define vout_ChromaCmp p_symbols->vout_ChromaCmp_inner
# define vout_CreatePicture p_symbols->vout_CreatePicture_inner
# define vout_CreateSubPicture p_symbols->vout_CreateSubPicture_inner
# define vout_DatePicture p_symbols->vout_DatePicture_inner
# define vout_DestroyPicture p_symbols->vout_DestroyPicture_inner
# define vout_DestroySubPicture p_symbols->vout_DestroySubPicture_inner
# define vout_DestroyThread p_symbols->vout_DestroyThread_inner
# define vout_DisplayPicture p_symbols->vout_DisplayPicture_inner
# define vout_DisplaySubPicture p_symbols->vout_DisplaySubPicture_inner
# define vout_LinkPicture p_symbols->vout_LinkPicture_inner
# define vout_PlacePicture p_symbols->vout_PlacePicture_inner
# define vout_UnlinkPicture p_symbols->vout_UnlinkPicture_inner
#endif /* __PLUGIN__ */

View File

@ -3,7 +3,7 @@
* This header provides a portable threads implementation.
*****************************************************************************
* Copyright (C) 1999, 2000 VideoLAN
* $Id: vlc_threads.h,v 1.2 2002/06/02 13:38:03 gbazin Exp $
* $Id: vlc_threads.h,v 1.3 2002/06/08 14:08:46 sam Exp $
*
* Authors: Jean-Marc Dressler <polux@via.ecp.fr>
* Samuel Hocevar <sam@via.ecp.fr>
@ -108,15 +108,23 @@ typedef unsigned (__stdcall *PTHREAD_START) (void *);
typedef struct
{
CRITICAL_SECTION csection;
/* WinNT/2K/XP implementation */
HANDLE mutex;
SIGNALOBJECTANDWAIT SignalObjectAndWait;
/* Win95/98/ME implementation */
CRITICAL_SECTION csection;
} vlc_mutex_t;
typedef struct
{
int i_waiting_threads;
HANDLE signal;
int i_waiting_threads;
/* WinNT/2K/XP implementation */
HANDLE semaphore;
HANDLE signal;
vlc_bool_t b_broadcast;
SIGNALOBJECTANDWAIT SignalObjectAndWait;
/* Win95/98/ME implementation */
enum { SIGNAL = 0, BROADCAST = 1 };
HANDLE p_events[2];
} vlc_cond_t;
#elif defined( PTHREAD_COND_T_IN_PTHREAD_H )
@ -174,7 +182,7 @@ VLC_EXPORT( int, __vlc_threads_init, ( vlc_object_t * ) );
VLC_EXPORT( int, vlc_threads_end, ( void ) );
VLC_EXPORT( int, __vlc_mutex_init, ( vlc_object_t *, vlc_mutex_t * ) );
VLC_EXPORT( int, __vlc_mutex_destroy, ( char *, int, vlc_mutex_t * ) );
VLC_EXPORT( int, vlc_cond_init, ( vlc_cond_t * ) );
VLC_EXPORT( int, __vlc_cond_init, ( vlc_object_t *, vlc_cond_t * ) );
VLC_EXPORT( int, __vlc_cond_destroy, ( char *, int, vlc_cond_t * ) );
VLC_EXPORT( int, __vlc_thread_create, ( vlc_object_t *, char *, int, char *, void * ( * ) ( void * ), vlc_bool_t ) );
VLC_EXPORT( void, __vlc_thread_ready, ( vlc_object_t * ) );
@ -327,6 +335,12 @@ static inline int __vlc_mutex_unlock( char * psz_file, int i_line,
__vlc_mutex_destroy( "(unknown)", 0, P_MUTEX )
#endif
/*****************************************************************************
* vlc_cond_init: initialize a condition
*****************************************************************************/
#define vlc_cond_init( P_THIS, P_COND ) \
__vlc_cond_init( CAST_TO_VLC_OBJECT(P_THIS), P_COND )
/*****************************************************************************
* vlc_cond_signal: start a thread on condition completion
*****************************************************************************/
@ -342,7 +356,17 @@ static inline int vlc_cond_signal( vlc_cond_t *p_condvar )
/* Release one waiting thread if one is available. */
/* For this trick to work properly, the vlc_cond_signal must be surrounded
* by a mutex. This will prevent another thread from stealing the signal */
PulseEvent( p_condvar->signal );
if( p_condvar->i_waiting_threads )
{
if( p_condvar->signal )
{
ReleaseSemaphore( p_condvar->semaphore, 1, 0 );
}
else
{
SetEvent( p_condvar->p_events[SIGNAL] );
}
}
return 0;
#elif defined( PTHREAD_COND_T_IN_PTHREAD_H )
@ -413,10 +437,22 @@ static inline int vlc_cond_broadcast( vlc_cond_t *p_condvar )
#elif defined( WIN32 )
/* Release all waiting threads. */
while( p_condvar->i_waiting_threads )
if( p_condvar->i_waiting_threads )
{
PulseEvent( p_condvar->signal );
Sleep( 1 ); /* deschedule the current thread */
if( p_condvar->signal )
{
p_condvar->b_broadcast = 1;
/* This call is atomic */
ReleaseSemaphore( p_condvar->semaphore,
p_condvar->i_waiting_threads, 0 );
/* Wait for all threads to get the semaphore */
WaitForSingleObject( p_condvar->signal, INFINITE );
p_condvar->b_broadcast = 0;
}
else
{
SetEvent( p_condvar->p_events[BROADCAST] );
}
}
return 0;
@ -497,31 +533,56 @@ static inline int __vlc_cond_wait( char * psz_file, int i_line,
return i_ret;
#elif defined( WIN32 )
/* It is only possible to atomically release the mutex and initiate the
* waiting on WinNT/2K/XP. Win9x doesn't have SignalObjectAndWait().
*/
int i_result;
/* Increase our wait count */
p_condvar->i_waiting_threads++;
p_condvar->i_waiting_threads ++;
if( p_mutex->mutex )
if( p_condvar->signal )
{
p_mutex->SignalObjectAndWait( p_mutex->mutex, p_condvar->signal,
INFINITE, FALSE );
/* It is only possible to atomically release the mutex and initiate the
* waiting on WinNT/2K/XP. Win9x doesn't have SignalObjectAndWait(). */
p_condvar->SignalObjectAndWait( p_mutex->mutex, p_condvar->semaphore,
INFINITE, FALSE );
/* XXX: we should protect i_waiting_threads with a mutex, but
* is it really worth it ? */
p_condvar->i_waiting_threads--;
if( p_condvar->b_broadcast
&& p_condvar->i_waiting_threads == 0 )
{
p_condvar->SignalObjectAndWait( p_condvar->signal, p_mutex->mutex,
INFINITE, FALSE );
}
else
{
/* Just take back the lock */
WaitForSingleObject( p_mutex->mutex, INFINITE );
}
return 0;
}
else
{
/* Release the mutex */
vlc_mutex_unlock( p_mutex );
i_result = WaitForSingleObject( p_condvar->signal, INFINITE);
p_condvar->i_waiting_threads --;
int i_ret;
/* Release the mutex, wait, and reacquire. */
LeaveCriticalSection( &p_mutex->csection );
i_ret = WaitForMultipleObjects( 2, p_condvar->p_events,
FALSE, INFINITE );
EnterCriticalSection( &p_mutex->csection );
/* Decrease our wait count */
p_condvar->i_waiting_threads--;
/* If we are the last waiter and it was a broadcast signal, reset
* the broadcast event. */
if( i_ret == WAIT_OBJECT_0 + BROADCAST
&& p_condvar->i_waiting_threads == 0 )
{
ResetEvent( p_condvar->p_events[BROADCAST] );
}
return( i_ret == WAIT_FAILED );
}
/* Reacquire the mutex before returning. */
vlc_mutex_lock( p_mutex );
return( i_result == WAIT_FAILED );
#elif defined( PTHREAD_COND_T_IN_PTHREAD_H )
# ifdef DEBUG

View File

@ -2,7 +2,7 @@
* aout_macosx.c : CoreAudio output plugin
*****************************************************************************
* Copyright (C) 2001 VideoLAN
* $Id: aout_macosx.m,v 1.5 2002/06/01 12:32:00 sam Exp $
* $Id: aout_macosx.m,v 1.6 2002/06/08 14:08:46 sam Exp $
*
* Authors: Colin Delacroix <colin@zoy.org>
* Jon Lech Johansen <jon-vl@nanocrew.net>
@ -157,7 +157,7 @@ static int aout_Open( aout_thread_t *p_aout )
/* initialize mutex and cond */
vlc_mutex_init( p_aout, &p_aout->p_sys->mutex_lock );
vlc_cond_init( &p_aout->p_sys->cond_sync );
vlc_cond_init( p_aout, &p_aout->p_sys->cond_sync );
/* initialize source stream format */
memcpy( &p_aout->p_sys->s_src_stream_format,

View File

@ -2,7 +2,7 @@
* vpar_pool.c : management of the pool of decoder threads
*****************************************************************************
* Copyright (C) 2001 VideoLAN
* $Id: vpar_pool.c,v 1.11 2002/06/02 09:03:54 sam Exp $
* $Id: vpar_pool.c,v 1.12 2002/06/08 14:08:46 sam Exp $
*
* Authors: Christophe Massiot <massiot@via.ecp.fr>
*
@ -57,8 +57,8 @@ void vpar_InitPool( vpar_thread_t * p_vpar )
/* Initialize mutex and cond. */
vlc_mutex_init( p_vpar->p_fifo, &p_vpar->pool.lock );
vlc_cond_init( &p_vpar->pool.wait_empty );
vlc_cond_init( &p_vpar->pool.wait_undecoded );
vlc_cond_init( p_vpar->p_fifo, &p_vpar->pool.wait_empty );
vlc_cond_init( p_vpar->p_fifo, &p_vpar->pool.wait_undecoded );
/* Spawn optional video decoder threads. */
p_vpar->pool.i_smp = 0;

View File

@ -2,7 +2,7 @@
* audio_output.c : audio output thread
*****************************************************************************
* Copyright (C) 1999-2001 VideoLAN
* $Id: audio_output.c,v 1.85 2002/06/01 12:32:01 sam Exp $
* $Id: audio_output.c,v 1.86 2002/06/08 14:08:46 sam Exp $
*
* Authors: Michel Kaempf <maxx@via.ecp.fr>
* Cyril Deguet <asmax@via.ecp.fr>
@ -154,7 +154,7 @@ static int aout_SpawnThread( aout_thread_t * p_aout )
{
p_aout->fifo[i_index].i_format = AOUT_FIFO_NONE;
vlc_mutex_init( p_aout, &p_aout->fifo[i_index].data_lock );
vlc_cond_init( &p_aout->fifo[i_index].data_wait );
vlc_cond_init( p_aout, &p_aout->fifo[i_index].data_wait );
}
/* Compute the size (in audio units) of the audio output buffer. Although

View File

@ -4,7 +4,7 @@
* decoders.
*****************************************************************************
* Copyright (C) 1998-2001 VideoLAN
* $Id: input.c,v 1.203 2002/06/07 23:53:44 sam Exp $
* $Id: input.c,v 1.204 2002/06/08 14:08:46 sam Exp $
*
* Authors: Christophe Massiot <massiot@via.ecp.fr>
*
@ -112,7 +112,7 @@ input_thread_t *__input_CreateThread( vlc_object_t *p_parent,
/* Set locks. */
vlc_mutex_init( p_input, &p_input->stream.stream_lock );
vlc_cond_init( &p_input->stream.stream_wait );
vlc_cond_init( p_input, &p_input->stream.stream_wait );
vlc_mutex_init( p_input, &p_input->stream.control.control_lock );
/* Initialize stream description */

View File

@ -2,7 +2,7 @@
* input_dec.c: Functions for the management of decoders
*****************************************************************************
* Copyright (C) 1999-2001 VideoLAN
* $Id: input_dec.c,v 1.38 2002/06/02 09:03:54 sam Exp $
* $Id: input_dec.c,v 1.39 2002/06/08 14:08:46 sam Exp $
*
* Authors: Christophe Massiot <massiot@via.ecp.fr>
*
@ -229,7 +229,7 @@ static decoder_fifo_t * CreateDecoderFifo( input_thread_t * p_input,
/* Initialize the p_fifo structure */
vlc_mutex_init( p_input, &p_fifo->data_lock );
vlc_cond_init( &p_fifo->data_wait );
vlc_cond_init( p_input, &p_fifo->data_wait );
p_es->p_decoder_fifo = p_fifo;
p_fifo->i_id = p_es->i_id;

View File

@ -268,9 +268,6 @@ static inline const char * module_error( char *psz_buffer )
(p_symbols)->msleep_inner = msleep; \
(p_symbols)->__network_ChannelJoin_inner = __network_ChannelJoin; \
(p_symbols)->__network_ChannelCreate_inner = __network_ChannelCreate; \
(p_symbols)->playlist_Command_inner = playlist_Command; \
(p_symbols)->playlist_Add_inner = playlist_Add; \
(p_symbols)->playlist_Delete_inner = playlist_Delete; \
(p_symbols)->__vout_CreateThread_inner = __vout_CreateThread; \
(p_symbols)->vout_DestroyThread_inner = vout_DestroyThread; \
(p_symbols)->vout_ChromaCmp_inner = vout_ChromaCmp; \
@ -301,11 +298,14 @@ static inline const char * module_error( char *psz_buffer )
(p_symbols)->__vlc_object_detach_all_inner = __vlc_object_detach_all; \
(p_symbols)->__vlc_object_attach_inner = __vlc_object_attach; \
(p_symbols)->__vlc_dumpstructure_inner = __vlc_dumpstructure; \
(p_symbols)->playlist_Command_inner = playlist_Command; \
(p_symbols)->playlist_Add_inner = playlist_Add; \
(p_symbols)->playlist_Delete_inner = playlist_Delete; \
(p_symbols)->__vlc_threads_init_inner = __vlc_threads_init; \
(p_symbols)->vlc_threads_end_inner = vlc_threads_end; \
(p_symbols)->__vlc_mutex_init_inner = __vlc_mutex_init; \
(p_symbols)->__vlc_mutex_destroy_inner = __vlc_mutex_destroy; \
(p_symbols)->vlc_cond_init_inner = vlc_cond_init; \
(p_symbols)->__vlc_cond_init_inner = __vlc_cond_init; \
(p_symbols)->__vlc_cond_destroy_inner = __vlc_cond_destroy; \
(p_symbols)->__vlc_thread_create_inner = __vlc_thread_create; \
(p_symbols)->__vlc_thread_ready_inner = __vlc_thread_ready; \

View File

@ -2,7 +2,7 @@
* objects.c: vlc_object_t handling
*****************************************************************************
* Copyright (C) 2002 VideoLAN
* $Id: objects.c,v 1.10 2002/06/07 23:53:44 sam Exp $
* $Id: objects.c,v 1.11 2002/06/08 14:08:46 sam Exp $
*
* Authors: Samuel Hocevar <sam@zoy.org>
*
@ -147,7 +147,7 @@ void * __vlc_object_create( vlc_object_t *p_this, int i_type )
p_new->i_children = 0;
vlc_mutex_init( p_new, &p_new->object_lock );
vlc_cond_init( &p_new->object_wait );
vlc_cond_init( p_new, &p_new->object_wait );
//msg_Dbg( p_new, "created object" );

View File

@ -2,7 +2,7 @@
* threads.c : threads implementation for the VideoLAN client
*****************************************************************************
* Copyright (C) 1999, 2000, 2001, 2002 VideoLAN
* $Id: threads.c,v 1.6 2002/06/04 00:11:12 sam Exp $
* $Id: threads.c,v 1.7 2002/06/08 14:08:46 sam Exp $
*
* Authors: Jean-Marc Dressler <polux@via.ecp.fr>
* Samuel Hocevar <sam@zoy.org>
@ -176,13 +176,12 @@ int __vlc_mutex_init( vlc_object_t *p_this, vlc_mutex_t *p_mutex )
{
/* We are running on NT/2K/XP, we can use SignalObjectAndWait */
p_mutex->mutex = CreateMutex( 0, FALSE, 0 );
p_mutex->SignalObjectAndWait = p_this->p_vlc->SignalObjectAndWait;
return ( p_mutex->mutex ? 0 : 1 );
}
else
{
InitializeCriticalSection( &p_mutex->csection );
p_mutex->mutex = NULL;
InitializeCriticalSection( &p_mutex->csection );
return 0;
}
@ -278,7 +277,7 @@ int __vlc_mutex_destroy( char * psz_file, int i_line, vlc_mutex_t *p_mutex )
/*****************************************************************************
* vlc_cond_init: initialize a condition
*****************************************************************************/
int vlc_cond_init( vlc_cond_t *p_condvar )
int __vlc_cond_init( vlc_object_t *p_this, vlc_cond_t *p_condvar )
{
#if defined( PTH_INIT_IN_PTH_H )
return pth_cond_init( p_condvar );
@ -288,16 +287,32 @@ int vlc_cond_init( vlc_cond_t *p_condvar )
return ( *p_condvar == NULL ) ? errno : 0;
#elif defined( WIN32 )
/* initialise counter */
/* Initialize counter */
p_condvar->i_waiting_threads = 0;
/* Create an auto-reset event. */
p_condvar->signal = CreateEvent( NULL, /* no security */
FALSE, /* auto-reset event */
FALSE, /* non-signaled initially */
NULL ); /* unnamed */
if( (GetVersion() < 0x80000000) && !p_this->p_vlc->b_fast_pthread )
{
/* Create an auto-reset event and a semaphore. */
p_condvar->signal = CreateEvent( NULL, FALSE, FALSE, NULL );
p_condvar->semaphore = CreateSemaphore( NULL, 0, 0x7fffffff, NULL );
return( !p_condvar->signal );
p_condvar->b_broadcast = 0;
/* We are running on NT/2K/XP, we can use SignalObjectAndWait */
p_condvar->SignalObjectAndWait = p_this->p_vlc->SignalObjectAndWait;
return !p_condvar->signal || !p_condvar->semaphore;
}
else
{
p_condvar->signal = NULL;
/* Create an auto-reset event and a manual-reset event. */
p_condvar->p_events[SIGNAL] = CreateEvent( NULL, FALSE, FALSE, NULL );
p_condvar->p_events[BROADCAST] = CreateEvent( NULL, TRUE, FALSE, NULL );
return !p_condvar->p_events[SIGNAL] || !p_condvar->p_events[BROADCAST];
}
#elif defined( PTHREAD_COND_T_IN_PTHREAD_H )
return pthread_cond_init( p_condvar, NULL );
@ -341,7 +356,16 @@ int __vlc_cond_destroy( char * psz_file, int i_line, vlc_cond_t *p_condvar )
return st_cond_destroy( *p_condvar );
#elif defined( WIN32 )
return( !CloseHandle( p_condvar->signal ) );
if( p_condvar->signal )
{
return !CloseHandle( p_condvar->signal )
|| !CloseHandle( p_condvar->semaphore );
}
else
{
return !CloseHandle( p_condvar->p_events[SIGNAL] )
|| !CloseHandle( p_condvar->p_events[BROADCAST] );
}
#elif defined( PTHREAD_COND_T_IN_PTHREAD_H )
int i_result = pthread_cond_destroy( p_condvar );
@ -381,7 +405,7 @@ int __vlc_thread_create( vlc_object_t *p_this, char * psz_file, int i_line,
wrapper.p_data = (void *)p_this;
getitimer( ITIMER_PROF, &wrapper.itimer );
vlc_mutex_init( p_this, &wrapper.lock );
vlc_cond_init( &wrapper.wait );
vlc_cond_init( p_this, &wrapper.wait );
vlc_mutex_lock( &wrapper.lock );
/* Alter user-passed data so that we call the wrapper instead
@ -438,17 +462,17 @@ int __vlc_thread_create( vlc_object_t *p_this, char * psz_file, int i_line,
if( i_ret == 0 )
{
msg_Dbg( p_this, "thread %d (%s) created (%s:%d)",
p_this->thread_id, psz_name, psz_file, i_line );
p_this->b_thread = 1;
if( b_wait )
{
msg_Dbg( p_this, "waiting for thread completion" );
vlc_cond_wait( &p_this->object_wait, &p_this->object_lock );
}
p_this->b_thread = 1;
msg_Dbg( p_this, "thread %d (%s) created (%s:%d)",
p_this->thread_id, psz_name, psz_file, i_line );
vlc_mutex_unlock( &p_this->object_lock );
}
else

View File

@ -2,7 +2,7 @@
* win32_specific.c: Win32 specific features
*****************************************************************************
* Copyright (C) 2001 VideoLAN
* $Id: win32_specific.c,v 1.11 2002/06/02 14:26:16 gbazin Exp $
* $Id: win32_specific.c,v 1.12 2002/06/08 14:08:46 sam Exp $
*
* Authors: Samuel Hocevar <sam@zoy.org>
* Gildas Bazin <gbazin@netcourrier.com>
@ -60,7 +60,7 @@ void system_Init( vlc_t *p_this, int *pi_argc, char *ppsz_argv[] )
*****************************************************************************/
void system_Configure( vlc_t *p_this )
{
p_this->p_vlc->b_fast_pthread = config_GetInt( p_this, "fast_pthread" );
p_this->p_vlc->b_fast_pthread = config_GetInt( p_this, "fast-pthread" );
}
/*****************************************************************************