* sigproc.h (no_thread_exit_protect): New class.
* sigproc.cc (thread_exit): Use no_thread_exit_protect to determine if we need to coordinate ThreadExit/ExitProcess. * fhandler_dsp.cc (fhandler_dev_dsp::Audio_out::stop): Use no_thread_exit_protect to kludge around waiting for waveOutClose as it waits for a thread that never exits. (fhandler_dev_dsp::Audio_in::stop): Ditto for waveInClose. * fhandler.h (fhandler_dev_dsp::base): New method. (fhandler_dev_dsp::_read): Ditto. (fhandler_dev_dsp::_write): Ditto. (fhandler_dev_dsp::_ioctl): Ditto. (fhandler_dev_dsp::_fixup_after_fork): Ditto. (fhandler_dev_dsp::_fixup_after_exec): Ditto. * fhandler_dsp.cc (fhandler_dev_dsp::read): Call real function via base() pointer. (fhandler_dev_dsp::write): Ditto. (fhandler_dev_dsp::ioctl): Ditto. (fhandler_dev_dsp::fixup_after_fork): Ditto. (fhandler_dev_dsp::fixup_after_exec): Ditto. (fhandler_dev_dsp::_read): Rename by adding an leading underscore. (fhandler_dev_dsp::_write): Ditto. (fhandler_dev_dsp::_ioctl): Ditto. (fhandler_dev_dsp::_fixup_after_fork): Ditto. (fhandler_dev_dsp::_fixup_after_exec): Ditto.
This commit is contained in:
@@ -1790,16 +1790,23 @@ class fhandler_dev_dsp: public fhandler_base
|
||||
Audio_in *audio_in_;
|
||||
public:
|
||||
fhandler_dev_dsp ();
|
||||
fhandler_dev_dsp *base () const {return (fhandler_dev_dsp *)archetype;}
|
||||
|
||||
int open (int flags, mode_t mode = 0);
|
||||
ssize_t __stdcall write (const void *ptr, size_t len);
|
||||
void __reg3 read (void *ptr, size_t& len);
|
||||
int ioctl (unsigned int cmd, void *);
|
||||
off_t lseek (off_t, int) { return 0; }
|
||||
int close ();
|
||||
void fixup_after_fork (HANDLE parent);
|
||||
void fixup_after_exec ();
|
||||
|
||||
private:
|
||||
ssize_t __stdcall _write (const void *ptr, size_t len);
|
||||
void __reg3 _read (void *ptr, size_t& len);
|
||||
int _ioctl (unsigned int cmd, void *);
|
||||
void _fixup_after_fork (HANDLE parent);
|
||||
void _fixup_after_exec ();
|
||||
|
||||
void close_audio_in ();
|
||||
void close_audio_out (bool immediately = false);
|
||||
bool use_archetype () const {return true;}
|
||||
|
Reference in New Issue
Block a user