Author: ithamar Date: 2010-04-11 16:26:19 +0200 (Sun, 11 Apr 2010) New Revision: 36154 Changeset: http://dev.haiku-os.org/changeset/36154/haiku Modified: haiku/trunk/headers/private/app/LinkSender.h haiku/trunk/headers/private/app/ServerLink.h haiku/trunk/src/kits/app/Application.cpp haiku/trunk/src/servers/app/ServerApp.cpp Log: * Make sure LinkSender knows team ID of receiving team; this fixes the >64k ServerLink transfers. Modified: haiku/trunk/headers/private/app/LinkSender.h =================================================================== --- haiku/trunk/headers/private/app/LinkSender.h 2010-04-11 14:13:57 UTC (rev 36153) +++ haiku/trunk/headers/private/app/LinkSender.h 2010-04-11 14:26:19 UTC (rev 36154) @@ -24,6 +24,9 @@ void SetPort(port_id port); port_id Port() const { return fPort; } + team_id TargetTeam() const; + void SetTargetTeam(team_id team); + status_t StartMessage(int32 code, size_t minSize = 0); void CancelMessage(void); status_t EndMessage(bool needsReply = false); @@ -56,6 +59,20 @@ status_t fCurrentStatus; }; + +inline team_id +LinkSender::TargetTeam() const +{ + return fTargetTeam; +} + + +inline void +LinkSender::SetTargetTeam(team_id team) +{ + fTargetTeam = team; +} + } // namespace BPrivate #endif /* _LINK_SENDER_H */ Modified: haiku/trunk/headers/private/app/ServerLink.h =================================================================== --- haiku/trunk/headers/private/app/ServerLink.h 2010-04-11 14:13:57 UTC (rev 36153) +++ haiku/trunk/headers/private/app/ServerLink.h 2010-04-11 14:26:19 UTC (rev 36154) @@ -43,6 +43,9 @@ void SetSenderPort(port_id port); port_id SenderPort(); + void SetTargetTeam(team_id team); + team_id TargetTeam(); + status_t StartMessage(int32 code, size_t minSize = 0); void CancelMessage(); status_t EndMessage(); @@ -109,6 +112,20 @@ } +inline void +ServerLink::SetTargetTeam(team_id team) +{ + fSender->SetTargetTeam(team); +} + + +inline team_id +ServerLink::TargetTeam() +{ + return fSender->TargetTeam(); +} + + inline status_t ServerLink::StartMessage(int32 code, size_t minSize) { Modified: haiku/trunk/src/kits/app/Application.cpp =================================================================== --- haiku/trunk/src/kits/app/Application.cpp 2010-04-11 14:13:57 UTC (rev 36153) +++ haiku/trunk/src/kits/app/Application.cpp 2010-04-11 14:26:19 UTC (rev 36154) @@ -1250,6 +1250,7 @@ fServerLink->AttachString(fAppName); area_id sharedReadOnlyArea; + team_id serverTeam; port_id serverPort; int32 code; @@ -1259,12 +1260,13 @@ // directly; we now talk to our server alter ego only. fServerLink->Read<port_id>(&serverPort); fServerLink->Read<area_id>(&sharedReadOnlyArea); + fServerLink->Read<team_id>(&serverTeam); } else { fServerLink->SetSenderPort(-1); debugger("BApplication: couldn't obtain new app_server comm port"); return B_ERROR; } - + fServerLink->SetTargetTeam(serverTeam); fServerLink->SetSenderPort(serverPort); status = _SetupServerAllocator(); Modified: haiku/trunk/src/servers/app/ServerApp.cpp =================================================================== --- haiku/trunk/src/servers/app/ServerApp.cpp 2010-04-11 14:13:57 UTC (rev 36153) +++ haiku/trunk/src/servers/app/ServerApp.cpp 2010-04-11 14:26:19 UTC (rev 36154) @@ -116,6 +116,7 @@ fLink.SetSenderPort(fClientReplyPort); fLink.SetReceiverPort(fMessagePort); + fLink.SetTargetTeam(clientTeam); // we let the application own the port, so that we get aware when it's gone if (set_port_owner(fMessagePort, clientTeam) < B_OK) { @@ -2993,10 +2994,15 @@ { // Message-dispatching loop for the ServerApp + // get our own team ID + thread_info threadInfo; + get_thread_info(fThread, &threadInfo); + // First let's tell the client how to talk with us. fLink.StartMessage(B_OK); fLink.Attach<port_id>(fMessagePort); fLink.Attach<area_id>(fDesktop->SharedReadOnlyArea()); + fLink.Attach<team_id>(threadInfo.team); fLink.Flush(); BPrivate::LinkReceiver &receiver = fLink.Receiver();