* 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:
Christopher Faylor
2014-03-17 04:41:35 +00:00
parent 600afd99ab
commit 4f0b5a097d
5 changed files with 97 additions and 7 deletions

View File

@@ -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;}