From 7adf6ce100390e47ad2e151ccd0d4d159807467e Mon Sep 17 00:00:00 2001 From: Salvatore Benedetto Date: Wed, 10 Sep 2008 16:22:23 +0000 Subject: [PATCH] * Set msg_qbytes on IPC_SET * Wake up only one thread waiting to send. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27402 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/system/kernel/posix/xsi_message_queue.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/system/kernel/posix/xsi_message_queue.cpp b/src/system/kernel/posix/xsi_message_queue.cpp index 71b846d3b1..8335c7eed7 100644 --- a/src/system/kernel/posix/xsi_message_queue.cpp +++ b/src/system/kernel/posix/xsi_message_queue.cpp @@ -133,6 +133,7 @@ public: fMessageQueue.msg_perm.gid = result->msg_perm.gid; fMessageQueue.msg_perm.mode = (fMessageQueue.msg_perm.mode & ~0x01ff) | (result->msg_perm.mode & 0x01ff); + fMessageQueue.msg_qbytes = result->msg_qbytes; fMessageQueue.msg_ctime = (time_t)real_time_clock(); } @@ -249,7 +250,8 @@ public: thread_unblock_locked(entry->thread, 0); } } else { - while (queued_thread *entry = fWaitingToSend.RemoveHead()) { + // Wake up only one thread waiting to send + if (queued_thread *entry = fWaitingToSend.RemoveHead()) { entry->queued = false; fThreadsWaitingToSend--; thread_unblock_locked(entry->thread, 0); @@ -587,6 +589,11 @@ _user_xsi_msgctl(int messageQueueID, int command, struct msqid_ds *buffer) "increase the maximum number of bytes allowed on queue\n")); return EPERM; } + if (msg.msg_qbytes == 0) { + TRACE_ERROR(("xsi_msgctl: can't set msg_qbytes to 0!\n")); + return EINVAL; + } + messageQueue->DoIpcSet(&msg); break; }