See also http://defect.opensolaris.org/bz/show_bug.cgi?id=10858.
The wave_sada.cpp file for eSpeak determines if audio is playing by using the play.active field of audio_info_t. With the introduction of the boomer audio system to OpenSolaris, the behavior of the play.active field is inconsistent with the prior behavior - for all intents and purposes, it is now never cleared as used by wave_sada.cpp. The result is that calls to eSpeak_Synchronize hang even if no speech samples are being played because wave_is_busy always returns True.
A boomer integrator says the play.active field is being used incorrectly by eSpeak's wave_sada.cpp file and that a different solution needs to be provided by eSpeak, not boomer.
The attached patch to espeak-1.40.02 changes wave_sada.cpp:wave_is_busy to look at the time remaining to play instead of the play.active field. This works well on pre-boomer and post-boomer versions of OpenSolaris and resolves the problem.
Patch to replace use of play.active with wave_get_remaining_time
Done for eSpeak version 1.4, which is now available.