Changeset 2164
- Timestamp:
- Nov 9, 2008, 2:39:15 PM (16 years ago)
- Location:
- code/branches/objecthierarchy/src/network
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
code/branches/objecthierarchy/src/network/ConnectionManager.cc
r2112 r2164 138 138 139 139 bool ConnectionManager::addPacket(ENetPacket *packet, ENetPeer *peer) { 140 boost::recursive_mutex::scoped_lock lock( instance_->enet_mutex);140 boost::recursive_mutex::scoped_lock lock(ConnectionManager::enet_mutex); 141 141 if(enet_peer_send(peer, NETWORK_DEFAULT_CHANNEL, packet)!=0) 142 142 return false; … … 156 156 if(!instance_) 157 157 return false; 158 boost::recursive_mutex::scoped_lock lock( instance_->enet_mutex);158 boost::recursive_mutex::scoped_lock lock(ConnectionManager::enet_mutex); 159 159 for(ClientInformation *i=ClientInformation::getBegin()->next(); i!=0; i=i->next()){ 160 160 COUT(3) << "adding broadcast packet for client: " << i->getID() << std::endl; … … 169 169 if(server==NULL || !instance_) 170 170 return false; 171 boost::recursive_mutex::scoped_lock lock( enet_mutex);171 boost::recursive_mutex::scoped_lock lock(ConnectionManager::enet_mutex); 172 172 enet_host_flush(server); 173 173 lock.unlock(); … … 180 180 atexit(enet_deinitialize); 181 181 { //scope of the mutex 182 boost::recursive_mutex::scoped_lock lock( enet_mutex);182 boost::recursive_mutex::scoped_lock lock(ConnectionManager::enet_mutex); 183 183 enet_initialize(); 184 184 server = enet_host_create(&bindAddress, NETWORK_MAX_CONNECTIONS, 0, 0); … … 194 194 while(!quit){ 195 195 { //mutex scope 196 boost::recursive_mutex::scoped_lock lock( enet_mutex);196 boost::recursive_mutex::scoped_lock lock(ConnectionManager::enet_mutex); 197 197 if(enet_host_service(server, event, NETWORK_WAIT_TIMEOUT)<0){ 198 198 // we should never reach this point … … 236 236 // if we're finishied, destroy server 237 237 { 238 boost::recursive_mutex::scoped_lock lock( enet_mutex);238 boost::recursive_mutex::scoped_lock lock(ConnectionManager::enet_mutex); 239 239 enet_host_destroy(server); 240 240 lock.unlock(); … … 250 250 while(temp!=0){ 251 251 { 252 boost::recursive_mutex::scoped_lock lock( enet_mutex);252 boost::recursive_mutex::scoped_lock lock(ConnectionManager::enet_mutex); 253 253 enet_peer_disconnect(temp->getPeer(), 0); 254 254 lock.unlock(); … … 258 258 //bugfix: might be the reason why server crashes when clients disconnects 259 259 temp = ClientInformation::getBegin()->next(); 260 boost::recursive_mutex::scoped_lock lock( enet_mutex);260 boost::recursive_mutex::scoped_lock lock(ConnectionManager::enet_mutex); 261 261 while( temp!=0 && enet_host_service(server, &event, NETWORK_WAIT_TIMEOUT) >= 0){ 262 262 switch (event.type) … … 332 332 void ConnectionManager::disconnectClient(ClientInformation *client){ 333 333 { 334 boost::recursive_mutex::scoped_lock lock( enet_mutex);334 boost::recursive_mutex::scoped_lock lock(ConnectionManager::enet_mutex); 335 335 enet_peer_disconnect(client->getPeer(), 0); 336 336 lock.unlock(); -
code/branches/objecthierarchy/src/network/packet/Packet.cc
r2132 r2164 54 54 55 55 std::map<size_t, Packet *> Packet::packetMap_; 56 boost::recursive_mutex Packet::packetMap_mutex; 56 57 57 58 Packet::Packet(){ … … 128 129 return false; 129 130 } 131 // Assures we don't create a packet and destroy it right after in another thread 132 // without having a reference in the packetMap_ 133 boost::recursive_mutex::scoped_lock lock(Packet::packetMap_mutex); 130 134 // We deliver ENet the data address so that it doesn't memcpy everything again. 131 135 // --> We have to delete data_ ourselves! … … 207 211 */ 208 212 void Packet::deletePacket(ENetPacket *enetPacket){ 213 boost::recursive_mutex::scoped_lock lock(Packet::packetMap_mutex); 209 214 // Get our Packet from a gloabal map with all Packets created in the send() method of Packet. 210 215 std::map<size_t, Packet*>::iterator it = packetMap_.find((size_t)enetPacket); … … 213 218 it->second->enetPacket_ = 0; 214 219 delete it->second; 215 //packetMap_.erase(it);220 packetMap_.erase(it); 216 221 COUT(4) << "PacketMap size: " << packetMap_.size() << std::endl; 217 222 } -
code/branches/objecthierarchy/src/network/packet/Packet.h
r2132 r2164 29 29 #define NETWORKPACKET_H 30 30 31 #include " ../NetworkPrereqs.h"31 #include "network/NetworkPrereqs.h" 32 32 33 33 #include <map> 34 34 #include <enet/enet.h> 35 #include <boost/thread/recursive_mutex.hpp> 35 36 36 37 #include "util/Integers.h" … … 93 94 private: 94 95 static std::map<size_t, Packet *> packetMap_; 96 //! Static mutex for any packetMap_ access 97 static boost::recursive_mutex packetMap_mutex; 95 98 ENetPacket *enetPacket_; 96 99 };
Note: See TracChangeset
for help on using the changeset viewer.