• Max Kellermann's avatar
    PlayerControl: add second Cond object · a9b62a2e
    Max Kellermann authored
    This fixes a deadlock bug introduced by 18076ac9.  After all, the
    second Cond was necessary.
    
    The problem: two threads can wait for a signal at the same time.  The
    player thread waits for the output thread to finish playback.  The
    main thread waits for the player thread to complete a command.  The
    output thread finishes playback, and sends a signal, which
    unfortunately does not wake up the player thread, but the main
    thread.  The main thread sees that the command is still not finished,
    and waits again.  The signal is lost forever, and MPD is deadlocked.
    a9b62a2e
Name
Last commit
Last update
..
AudioCompress Loading commit data...
archive Loading commit data...
cue Loading commit data...
db Loading commit data...
decoder Loading commit data...
dsd2pcm Loading commit data...
encoder Loading commit data...
event Loading commit data...
filter Loading commit data...
fs Loading commit data...
input Loading commit data...
mixer Loading commit data...
output Loading commit data...
playlist Loading commit data...
protocol Loading commit data...
thread Loading commit data...
util Loading commit data...
win Loading commit data...
AllCommands.cxx Loading commit data...
AllCommands.hxx Loading commit data...
ArchiveInternal.hxx Loading commit data...
ArchiveList.cxx Loading commit data...
ArchiveList.hxx Loading commit data...
ArchiveLookup.cxx Loading commit data...
ArchiveLookup.hxx Loading commit data...
ArchivePlugin.cxx Loading commit data...
ArchivePlugin.hxx Loading commit data...
Client.cxx Loading commit data...
Client.hxx Loading commit data...
ClientEvent.cxx Loading commit data...
ClientExpire.cxx Loading commit data...
ClientFile.cxx Loading commit data...
ClientFile.hxx Loading commit data...
ClientGlobal.cxx Loading commit data...
ClientIdle.cxx Loading commit data...
ClientInternal.hxx Loading commit data...
ClientList.cxx Loading commit data...
ClientList.hxx Loading commit data...
ClientMessage.cxx Loading commit data...
ClientMessage.hxx Loading commit data...
ClientNew.cxx Loading commit data...
ClientProcess.cxx Loading commit data...
ClientRead.cxx Loading commit data...
ClientSubscribe.cxx Loading commit data...
ClientSubscribe.hxx Loading commit data...
ClientWrite.cxx Loading commit data...
CommandError.cxx Loading commit data...
CommandError.hxx Loading commit data...
CommandLine.cxx Loading commit data...
CommandLine.hxx Loading commit data...
CommandListBuilder.cxx Loading commit data...
CommandListBuilder.hxx Loading commit data...
ConfigFile.cxx Loading commit data...
CrossFade.cxx Loading commit data...
CrossFade.hxx Loading commit data...
DatabaseCommands.cxx Loading commit data...
DatabaseCommands.hxx Loading commit data...
DatabaseGlue.cxx Loading commit data...
DatabaseGlue.hxx Loading commit data...
DatabaseHelpers.cxx Loading commit data...
DatabaseHelpers.hxx Loading commit data...
DatabaseLock.cxx Loading commit data...
DatabaseLock.hxx Loading commit data...
DatabasePlaylist.cxx Loading commit data...
DatabasePlaylist.hxx Loading commit data...
DatabasePlugin.hxx Loading commit data...
DatabasePrint.cxx Loading commit data...
DatabasePrint.hxx Loading commit data...
DatabaseQueue.cxx Loading commit data...
DatabaseQueue.hxx Loading commit data...
DatabaseRegistry.cxx Loading commit data...
DatabaseRegistry.hxx Loading commit data...
DatabaseSave.cxx Loading commit data...
DatabaseSave.hxx Loading commit data...
DatabaseSelection.cxx Loading commit data...
DatabaseSelection.hxx Loading commit data...
DatabaseSimple.hxx Loading commit data...
DatabaseVisitor.hxx Loading commit data...
DecoderAPI.cxx Loading commit data...
DecoderControl.cxx Loading commit data...
DecoderControl.hxx Loading commit data...
DecoderInternal.cxx Loading commit data...
DecoderInternal.hxx Loading commit data...
DecoderPrint.cxx Loading commit data...
DecoderPrint.hxx Loading commit data...
DecoderThread.cxx Loading commit data...
DecoderThread.hxx Loading commit data...
DespotifyUtils.cxx Loading commit data...
DespotifyUtils.hxx Loading commit data...
Directory.cxx Loading commit data...
Directory.hxx Loading commit data...
DirectorySave.cxx Loading commit data...
DirectorySave.hxx Loading commit data...
ExcludeList.cxx Loading commit data...
ExcludeList.hxx Loading commit data...
GlobalEvents.cxx Loading commit data...
GlobalEvents.hxx Loading commit data...
IOThread.cxx Loading commit data...
IOThread.hxx Loading commit data...
IcyMetaDataParser.cxx Loading commit data...
IcyMetaDataParser.hxx Loading commit data...
IdTable.hxx Loading commit data...
Idle.cxx Loading commit data...
Idle.hxx Loading commit data...
InotifyQueue.cxx Loading commit data...
InotifyQueue.hxx Loading commit data...
InotifySource.cxx Loading commit data...
InotifySource.hxx Loading commit data...
InotifyUpdate.cxx Loading commit data...
InotifyUpdate.hxx Loading commit data...
InputInit.cxx Loading commit data...
InputInit.hxx Loading commit data...
InputInternal.cxx Loading commit data...
InputInternal.hxx Loading commit data...
InputPlugin.hxx Loading commit data...
InputRegistry.cxx Loading commit data...
InputRegistry.hxx Loading commit data...
InputStream.cxx Loading commit data...
Listen.cxx Loading commit data...
Listen.hxx Loading commit data...
Log.cxx Loading commit data...
Log.hxx Loading commit data...
Main.cxx Loading commit data...
Main.hxx Loading commit data...
Mapper.cxx Loading commit data...
Mapper.hxx Loading commit data...
MessageCommands.cxx Loading commit data...
MessageCommands.hxx Loading commit data...
MixerAll.cxx Loading commit data...
MixerAll.hxx Loading commit data...
MusicBuffer.cxx Loading commit data...
MusicBuffer.hxx Loading commit data...
MusicChunk.cxx Loading commit data...
MusicChunk.hxx Loading commit data...
MusicPipe.cxx Loading commit data...
MusicPipe.hxx Loading commit data...
OtherCommands.cxx Loading commit data...
OtherCommands.hxx Loading commit data...
OutputAll.cxx Loading commit data...
OutputAll.hxx Loading commit data...
OutputCommand.cxx Loading commit data...
OutputCommand.hxx Loading commit data...
OutputCommands.cxx Loading commit data...
OutputCommands.hxx Loading commit data...
OutputControl.cxx Loading commit data...
OutputControl.hxx Loading commit data...
OutputError.hxx Loading commit data...
OutputFinish.cxx Loading commit data...
OutputInit.cxx Loading commit data...
OutputList.cxx Loading commit data...
OutputList.hxx Loading commit data...
OutputPlugin.cxx Loading commit data...
OutputPrint.cxx Loading commit data...
OutputPrint.hxx Loading commit data...
OutputState.cxx Loading commit data...
OutputState.hxx Loading commit data...
OutputThread.cxx Loading commit data...
OutputThread.hxx Loading commit data...
Partition.hxx Loading commit data...
Permission.cxx Loading commit data...
Permission.hxx Loading commit data...
PlayerCommands.cxx Loading commit data...
PlayerCommands.hxx Loading commit data...
PlayerControl.cxx Loading commit data...
PlayerControl.hxx Loading commit data...
PlayerThread.cxx Loading commit data...
PlayerThread.hxx Loading commit data...
Playlist.cxx Loading commit data...
Playlist.hxx Loading commit data...
PlaylistAny.cxx Loading commit data...
PlaylistAny.hxx Loading commit data...
PlaylistCommands.cxx Loading commit data...
PlaylistCommands.hxx Loading commit data...
PlaylistControl.cxx Loading commit data...
PlaylistDatabase.cxx Loading commit data...
PlaylistDatabase.hxx Loading commit data...
PlaylistEdit.cxx Loading commit data...
PlaylistFile.cxx Loading commit data...
PlaylistFile.hxx Loading commit data...
PlaylistGlobal.cxx Loading commit data...
PlaylistGlobal.hxx Loading commit data...
PlaylistInfo.hxx Loading commit data...
PlaylistMapper.cxx Loading commit data...
PlaylistMapper.hxx Loading commit data...
PlaylistPrint.cxx Loading commit data...
PlaylistPrint.hxx Loading commit data...
PlaylistQueue.cxx Loading commit data...
PlaylistQueue.hxx Loading commit data...
PlaylistSave.cxx Loading commit data...
PlaylistSave.hxx Loading commit data...
PlaylistSong.cxx Loading commit data...
PlaylistSong.hxx Loading commit data...
PlaylistState.cxx Loading commit data...
PlaylistState.hxx Loading commit data...
PlaylistVector.cxx Loading commit data...
PlaylistVector.hxx Loading commit data...
Queue.cxx Loading commit data...
Queue.hxx Loading commit data...
QueueCommands.cxx Loading commit data...
QueueCommands.hxx Loading commit data...
QueuePrint.cxx Loading commit data...
QueuePrint.hxx Loading commit data...
QueueSave.cxx Loading commit data...
QueueSave.hxx Loading commit data...
ReplayGainConfig.cxx Loading commit data...
ReplayGainInfo.cxx Loading commit data...
ServerSocket.cxx Loading commit data...
ServerSocket.hxx Loading commit data...
SignalHandlers.cxx Loading commit data...
SignalHandlers.hxx Loading commit data...
SocketError.hxx Loading commit data...
SocketUtil.cxx Loading commit data...
SocketUtil.hxx Loading commit data...
Song.cxx Loading commit data...
SongFilter.cxx Loading commit data...
SongFilter.hxx Loading commit data...
SongPrint.cxx Loading commit data...
SongPrint.hxx Loading commit data...
SongSave.cxx Loading commit data...
SongSave.hxx Loading commit data...
SongSticker.cxx Loading commit data...
SongSticker.hxx Loading commit data...
SongUpdate.cxx Loading commit data...
StateFile.cxx Loading commit data...
StateFile.hxx Loading commit data...
Stats.cxx Loading commit data...
StickerCommands.cxx Loading commit data...
StickerCommands.hxx Loading commit data...
StickerDatabase.cxx Loading commit data...
StickerDatabase.hxx Loading commit data...
StickerPrint.cxx Loading commit data...
StickerPrint.hxx Loading commit data...
Tag.cxx Loading commit data...
TagInternal.hxx Loading commit data...
TagNames.c Loading commit data...
TagPool.cxx Loading commit data...
TagPool.hxx Loading commit data...
TagPrint.cxx Loading commit data...
TagPrint.hxx Loading commit data...
TagSave.cxx Loading commit data...
TagSave.hxx Loading commit data...
TextFile.cxx Loading commit data...
TextFile.hxx Loading commit data...
TimePrint.cxx Loading commit data...
TimePrint.hxx Loading commit data...
UpdateArchive.cxx Loading commit data...
UpdateArchive.hxx Loading commit data...
UpdateContainer.cxx Loading commit data...
UpdateContainer.hxx Loading commit data...
UpdateDatabase.cxx Loading commit data...
UpdateDatabase.hxx Loading commit data...
UpdateGlue.cxx Loading commit data...
UpdateGlue.hxx Loading commit data...
UpdateIO.cxx Loading commit data...
UpdateIO.hxx Loading commit data...
UpdateInternal.hxx Loading commit data...
UpdateQueue.cxx Loading commit data...
UpdateQueue.hxx Loading commit data...
UpdateRemove.cxx Loading commit data...
UpdateRemove.hxx Loading commit data...
UpdateSong.cxx Loading commit data...
UpdateSong.hxx Loading commit data...
UpdateWalk.cxx Loading commit data...
UpdateWalk.hxx Loading commit data...
Volume.cxx Loading commit data...
Volume.hxx Loading commit data...
Win32Main.cxx Loading commit data...
ack.h Loading commit data...
aiff.c Loading commit data...
aiff.h Loading commit data...
ape.c Loading commit data...
ape.h Loading commit data...
audio_check.c Loading commit data...
audio_check.h Loading commit data...
audio_config.c Loading commit data...
audio_config.h Loading commit data...
audio_format.c Loading commit data...
audio_format.h Loading commit data...
audio_parser.c Loading commit data...
audio_parser.h Loading commit data...
check.h Loading commit data...
clock.c Loading commit data...
clock.h Loading commit data...
command.h Loading commit data...
conf.h Loading commit data...
daemon.c Loading commit data...
daemon.h Loading commit data...
db_error.h Loading commit data...
decoder_api.h Loading commit data...
decoder_buffer.c Loading commit data...
decoder_buffer.h Loading commit data...
decoder_command.h Loading commit data...
decoder_error.h Loading commit data...
decoder_list.c Loading commit data...
decoder_list.h Loading commit data...
decoder_plugin.c Loading commit data...
decoder_plugin.h Loading commit data...
encoder_api.h Loading commit data...
encoder_list.c Loading commit data...
encoder_list.h Loading commit data...
encoder_plugin.h Loading commit data...
fd_util.c Loading commit data...
fd_util.h Loading commit data...
filter_config.c Loading commit data...
filter_config.h Loading commit data...
filter_internal.h Loading commit data...
filter_plugin.c Loading commit data...
filter_plugin.h Loading commit data...
filter_registry.c Loading commit data...
filter_registry.h Loading commit data...
gcc.h Loading commit data...
gerror.h Loading commit data...
glib_compat.h Loading commit data...
glib_socket.h Loading commit data...
icy_server.c Loading commit data...
icy_server.h Loading commit data...
input_stream.h Loading commit data...
io_error.h Loading commit data...
ls.cxx Loading commit data...
ls.hxx Loading commit data...
mixer_api.c Loading commit data...
mixer_api.h Loading commit data...
mixer_control.c Loading commit data...
mixer_control.h Loading commit data...
mixer_list.h Loading commit data...
mixer_plugin.h Loading commit data...
mixer_type.c Loading commit data...
mixer_type.h Loading commit data...
mpd_error.h Loading commit data...
notify.cxx Loading commit data...
notify.hxx Loading commit data...
open.h Loading commit data...
output_api.h Loading commit data...
output_internal.h Loading commit data...
output_plugin.h Loading commit data...
page.c Loading commit data...
page.h Loading commit data...
pcm_buffer.c Loading commit data...
pcm_buffer.h Loading commit data...
pcm_channels.c Loading commit data...
pcm_channels.h Loading commit data...
pcm_convert.c Loading commit data...
pcm_convert.h Loading commit data...
pcm_dither.c Loading commit data...
pcm_dither.h Loading commit data...
pcm_dsd.c Loading commit data...
pcm_dsd.h Loading commit data...
pcm_dsd_usb.c Loading commit data...
pcm_dsd_usb.h Loading commit data...
pcm_export.c Loading commit data...
pcm_export.h Loading commit data...
pcm_format.c Loading commit data...
pcm_format.h Loading commit data...
pcm_mix.c Loading commit data...
pcm_mix.h Loading commit data...
pcm_pack.c Loading commit data...
pcm_pack.h Loading commit data...
pcm_prng.h Loading commit data...
pcm_resample.c Loading commit data...
pcm_resample.h Loading commit data...
pcm_resample_fallback.c Loading commit data...
pcm_resample_internal.h Loading commit data...
pcm_resample_libsamplerate.c Loading commit data...
pcm_utils.h Loading commit data...
pcm_volume.c Loading commit data...
pcm_volume.h Loading commit data...
playlist_error.h Loading commit data...
playlist_list.c Loading commit data...
playlist_list.h Loading commit data...
playlist_plugin.h Loading commit data...
poison.h Loading commit data...
refcount.h Loading commit data...
replay_gain_ape.c Loading commit data...
replay_gain_ape.h Loading commit data...
replay_gain_config.h Loading commit data...
replay_gain_info.h Loading commit data...
resolver.c Loading commit data...
resolver.h Loading commit data...
riff.c Loading commit data...
riff.h Loading commit data...
song.h Loading commit data...
song_sort.c Loading commit data...
song_sort.h Loading commit data...
stats.h Loading commit data...
string_util.c Loading commit data...
string_util.h Loading commit data...
tag.h Loading commit data...
tag_ape.c Loading commit data...
tag_ape.h Loading commit data...
tag_file.c Loading commit data...
tag_file.h Loading commit data...
tag_handler.c Loading commit data...
tag_handler.h Loading commit data...
tag_id3.c Loading commit data...
tag_id3.h Loading commit data...
tag_rva2.c Loading commit data...
tag_rva2.h Loading commit data...
tag_table.h Loading commit data...
text_input_stream.c Loading commit data...
text_input_stream.h Loading commit data...
timer.c Loading commit data...
timer.h Loading commit data...
tokenizer.c Loading commit data...
tokenizer.h Loading commit data...
uri.c Loading commit data...
uri.h Loading commit data...
utils.c Loading commit data...
utils.h Loading commit data...
zeroconf-avahi.c Loading commit data...
zeroconf-bonjour.c Loading commit data...
zeroconf-internal.h Loading commit data...
zeroconf.c Loading commit data...
zeroconf.h Loading commit data...