mirror of
https://github.com/RetroShare/RetroShare.git
synced 2025-05-04 23:25:32 -04:00
Merge pull request #1303 from csoler/v0.6-GXS-DistSync3-TurtleSearch
fixed deadlock due to turtle calling addVirtualPeer for client servic…
This commit is contained in:
commit
82c9084ca4
1 changed files with 27 additions and 22 deletions
|
@ -1608,8 +1608,6 @@ void p3turtle::handleTunnelRequest(RsTurtleOpenTunnelItem *item)
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
RsStackMutex stack(mTurtleMtx); /********** STACK LOCKED MTX ******/
|
|
||||||
|
|
||||||
if(found)
|
if(found)
|
||||||
{
|
{
|
||||||
#ifdef P3TURTLE_DEBUG
|
#ifdef P3TURTLE_DEBUG
|
||||||
|
@ -1618,9 +1616,13 @@ void p3turtle::handleTunnelRequest(RsTurtleOpenTunnelItem *item)
|
||||||
// Send back tunnel ok to the same guy
|
// Send back tunnel ok to the same guy
|
||||||
//
|
//
|
||||||
RsTurtleTunnelOkItem *res_item = new RsTurtleTunnelOkItem ;
|
RsTurtleTunnelOkItem *res_item = new RsTurtleTunnelOkItem ;
|
||||||
|
TurtleVirtualPeerId vpid ;
|
||||||
|
|
||||||
res_item->request_id = item->request_id ;
|
res_item->request_id = item->request_id ;
|
||||||
|
{
|
||||||
|
RsStackMutex stack(mTurtleMtx); /********** STACK LOCKED MTX ******/
|
||||||
res_item->tunnel_id = item->partial_tunnel_id ^ generatePersonalFilePrint(item->file_hash,_random_bias,false) ;
|
res_item->tunnel_id = item->partial_tunnel_id ^ generatePersonalFilePrint(item->file_hash,_random_bias,false) ;
|
||||||
|
|
||||||
res_item->PeerId(item->PeerId()) ;
|
res_item->PeerId(item->PeerId()) ;
|
||||||
|
|
||||||
TurtleTunnelId t_id = res_item->tunnel_id ; // save it because sendItem deletes the item
|
TurtleTunnelId t_id = res_item->tunnel_id ; // save it because sendItem deletes the item
|
||||||
|
@ -1646,9 +1648,12 @@ void p3turtle::handleTunnelRequest(RsTurtleOpenTunnelItem *item)
|
||||||
//
|
//
|
||||||
_outgoing_tunnel_client_services[t_id] = service ;
|
_outgoing_tunnel_client_services[t_id] = service ;
|
||||||
|
|
||||||
|
vpid = _local_tunnels[t_id].vpid;
|
||||||
|
}
|
||||||
|
|
||||||
// Notify the client service that there's a new virtual peer id available as a client.
|
// Notify the client service that there's a new virtual peer id available as a client.
|
||||||
//
|
//
|
||||||
service->addVirtualPeer(item->file_hash,_local_tunnels[t_id].vpid,RsTurtleGenericTunnelItem::DIRECTION_CLIENT) ;
|
service->addVirtualPeer(item->file_hash,vpid,RsTurtleGenericTunnelItem::DIRECTION_CLIENT) ;
|
||||||
|
|
||||||
// We return straight, because when something is found, there's no need to digg a tunnel further.
|
// We return straight, because when something is found, there's no need to digg a tunnel further.
|
||||||
//
|
//
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue