From 7e24e06e2cc6ae988d623ee7543ed161ab5e6ae9 Mon Sep 17 00:00:00 2001 From: Ingo Weinhold Date: Sun, 28 Jul 2002 21:23:52 +0000 Subject: [PATCH] Fixed synchronous SendMessage() versions. They need to add be_app_messenger as reply target, if the supplied reply target is invalid. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@523 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/kits/app/Messenger.cpp | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/kits/app/Messenger.cpp b/src/kits/app/Messenger.cpp index dbe214a757..188d744a90 100644 --- a/src/kits/app/Messenger.cpp +++ b/src/kits/app/Messenger.cpp @@ -316,7 +316,7 @@ BMessenger::LockTargetWithTimeout(bigtime_t timeout) const // SendMessage /*! \brief Delivers a BMessage synchronously to the messenger's target. - The method does not wait for a reply. It is sent asynchronously. + The method does not wait for a reply. The message is sent asynchronously. \param command The what field of the message to deliver. \param replyTo The handler to which a reply to the message shall be sent. @@ -339,7 +339,7 @@ BMessenger::SendMessage(uint32 command, BHandler *replyTo) const A copy of the supplied message is sent and the caller retains ownership of \a message. - The method does not wait for a reply. It is sent asynchronously. + The method does not wait for a reply. The message is sent asynchronously. \param message The message to be sent. \param replyTo The handler to which a reply to the message shall be sent. @@ -359,11 +359,13 @@ BMessenger::SendMessage(BMessage *message, BHandler *replyTo, bigtime_t timeout) const { DBG(OUT("BMessenger::SendMessage2(%.4s)\n", (char*)&message->what)); - // TODO: Verify the reply behavior. status_t error = (message ? B_OK : B_BAD_VALUE); if (error == B_OK) { BMessenger replyMessenger(replyTo); - bool wantsReply = replyTo; + // If the reply messenger is invalid use the app messenger. + if (!replyMessenger.IsValid()) + replyMessenger = be_app_messenger; + bool wantsReply = replyMessenger.IsValid(); error = message->_send_(fPort, fHandlerToken, fPreferredTarget, timeout, wantsReply, replyMessenger); } @@ -377,7 +379,7 @@ DBG(OUT("BMessenger::SendMessage2() done: %lx\n", error)); A copy of the supplied message is sent and the caller retains ownership of \a message. - The method does not wait for a reply. It is sent asynchronously. + The method does not wait for a reply. The message is sent asynchronously. \param message The message to be sent. \param replyTo A messenger specifying the target for a reply to \a message. @@ -395,11 +397,14 @@ status_t BMessenger::SendMessage(BMessage *message, BMessenger replyTo, bigtime_t timeout) const { - // TODO: Verify the reply behavior. status_t error = (message ? B_OK : B_BAD_VALUE); if (error == B_OK) { + // If the reply messenger is invalid use the app messenger. + if (!replyTo.IsValid()) + replyTo = be_app_messenger; + bool wantsReply = replyTo.IsValid(); error = message->_send_(fPort, fHandlerToken, fPreferredTarget, - timeout, true, replyTo); + timeout, wantsReply, replyTo); } return error; }