* 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:
@@ -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 */
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user