* Make sure LinkSender knows team ID of receiving team; this fixes the >64k ServerLink transfers.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36154 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Ithamar R. Adema
2010-04-11 14:26:19 +00:00
parent 575625f155
commit b13b0b0f4e
4 changed files with 43 additions and 1 deletions
+17
View File
@@ -24,6 +24,9 @@ class LinkSender {
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 @@ class LinkSender {
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 */
+17
View File
@@ -43,6 +43,9 @@ public:
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 @@ ServerLink::SenderPort()
}
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)
{
+3 -1
View File
@@ -1250,6 +1250,7 @@ BApplication::_ConnectToServer()
fServerLink->AttachString(fAppName);
area_id sharedReadOnlyArea;
team_id serverTeam;
port_id serverPort;
int32 code;
@@ -1259,12 +1260,13 @@ BApplication::_ConnectToServer()
// 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();
+6
View File
@@ -116,6 +116,7 @@ ServerApp::ServerApp(Desktop* desktop, port_id clientReplyPort,
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 @@ ServerApp::_MessageLooper()
{
// 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();