diff --git a/src/kits/media/MediaEventLooper.cpp b/src/kits/media/MediaEventLooper.cpp index f2ffa18b2c..e1e4abad45 100644 --- a/src/kits/media/MediaEventLooper.cpp +++ b/src/kits/media/MediaEventLooper.cpp @@ -433,18 +433,18 @@ void BMediaEventLooper::Quit() { CALLED(); - status_t err; if (fRunState == B_TERMINATED) return; SetRunState(B_QUITTING); - + write_port(ControlPort(), 0, NULL, 0); // null message to unblock the read (see BMediaNode::WaitForMessage) close_port(ControlPort()); - if (fControlThread != -1) + if (fControlThread != -1) { + status_t err; wait_for_thread(fControlThread, &err); - fControlThread = -1; - + fControlThread = -1; + } SetRunState(B_TERMINATED); } diff --git a/src/kits/media/MediaNode.cpp b/src/kits/media/MediaNode.cpp index 607a90d65b..e9dbcea9da 100644 --- a/src/kits/media/MediaNode.cpp +++ b/src/kits/media/MediaNode.cpp @@ -359,6 +359,8 @@ BMediaNode::WaitForMessage(bigtime_t waitUntil, size = read_port_etc(ControlPort(), &message, data, sizeof(data), B_ABSOLUTE_TIMEOUT, waitUntil); if (size <= 0) { + if (size == 0 && message == 0) + return B_OK; // a null message was received (to unblock the read) if (size != B_TIMED_OUT) ERROR("BMediaNode::WaitForMessage: read_port_etc error 0x%08lx\n",size); return size; // returns the error code