@@ -73,8 +73,6 @@ IE_CORE_DEFINERUNTIMETYPED( DisplayDriverServer );
7373namespace
7474{
7575
76- DisplayDriverServer::MergeMap g_mergeMap;
77-
7876/* Set the FD_CLOEXEC flag for the given socket descriptor, so that it will not exist on child processes.*/
7977static void fixSocketFlags ( int socketDesc )
8078{
@@ -100,7 +98,7 @@ class DisplayDriverServer::Session : public RefCounted
10098{
10199 public:
102100
103- Session ( boost::asio::io_service& io_service );
101+ Session ( boost::asio::io_service& io_service, DisplayDriverServer::MergeMap& mergeMap );
104102 ~Session () override ;
105103
106104 boost::asio::ip::tcp::socket& socket ();
@@ -119,7 +117,8 @@ class DisplayDriverServer::Session : public RefCounted
119117 DisplayDriverPtr m_displayDriver;
120118 DisplayDriverServerHeader m_header;
121119 CharVectorDataPtr m_buffer;
122- std::optional<int > m_mergeId;
120+ DisplayDriverServer::MergeMap& m_mergeMap;
121+ std::optional<int > m_mergeId;
123122};
124123
125124class DisplayDriverServer ::PrivateData : public RefCounted
@@ -202,7 +201,7 @@ DisplayDriverServer::DisplayDriverServer( DisplayDriverServer::Port portNumber )
202201{
203202 m_data = new DisplayDriverServer::PrivateData ( portNumber );
204203
205- DisplayDriverServer::SessionPtr newSession ( new DisplayDriverServer::Session ( m_data->m_service ) );
204+ DisplayDriverServer::SessionPtr newSession ( new DisplayDriverServer::Session ( m_data->m_service , m_mergeMap ) );
206205 m_data->m_acceptor .async_accept ( newSession->socket (),
207206 boost::bind ( &DisplayDriverServer::handleAccept, this , newSession,
208207 boost::asio::placeholders::error));
@@ -265,17 +264,6 @@ const DisplayDriverServer::PortRange &DisplayDriverServer::registeredPortRange(
265264 return it->second ;
266265}
267266
268- const DisplayDriverServer::MergeDriverInfo &DisplayDriverServer::getMergeDriverInfo ( int mergeId )
269- {
270- auto it = g_mergeMap.find ( mergeId );
271- if ( it == g_mergeMap.end () )
272- {
273- throw IECore::InvalidArgumentException ( " DisplayDriverServer::getMergeCount : " + std::to_string (mergeId) + " is not in the merge map." );
274- }
275-
276- return it->second ;
277- }
278-
279267DisplayDriverServer::Port DisplayDriverServer::portNumber ()
280268{
281269 return m_data->m_acceptor .local_endpoint ().port ();
@@ -297,7 +285,7 @@ void DisplayDriverServer::handleAccept( DisplayDriverServer::SessionPtr session,
297285{
298286 if (!error)
299287 {
300- DisplayDriverServer::SessionPtr newSession ( new DisplayDriverServer::Session ( m_data->m_service ) );
288+ DisplayDriverServer::SessionPtr newSession ( new DisplayDriverServer::Session ( m_data->m_service , m_mergeMap ) );
301289 m_data->m_acceptor .async_accept ( newSession->socket (),
302290 boost::bind ( &DisplayDriverServer::handleAccept, this , newSession,
303291 boost::asio::placeholders::error));
@@ -309,8 +297,8 @@ void DisplayDriverServer::handleAccept( DisplayDriverServer::SessionPtr session,
309297 * DisplayDriverServer::Session functions
310298 */
311299
312- DisplayDriverServer::Session::Session ( boost::asio::io_service& io_service ) :
313- m_socket( io_service ), m_displayDriver(nullptr ), m_buffer( new CharVectorData( ) )
300+ DisplayDriverServer::Session::Session ( boost::asio::io_service& io_service, DisplayDriverServer::MergeMap& mergeMap ) :
301+ m_socket( io_service ), m_displayDriver(nullptr ), m_buffer( new CharVectorData( ) ), m_mergeMap( mergeMap )
314302{
315303}
316304
@@ -386,10 +374,10 @@ void DisplayDriverServer::Session::handleReadHeader( const boost::system::error_
386374 }
387375 else
388376 {
389- auto &m = g_mergeMap .at (m_mergeId.value ()); // Error out if not found
377+ auto &m = m_mergeMap .at (m_mergeId.value ()); // Error out if not found
390378 if ( --m.mergeCount <= 0 )
391379 {
392- g_mergeMap .erase (m_mergeId.value ());
380+ m_mergeMap .erase (m_mergeId.value ());
393381 m_displayDriver->imageClose ();
394382 }
395383 }
@@ -462,7 +450,7 @@ void DisplayDriverServer::Session::handleReadOpenParameters( const boost::system
462450 m_mergeId = parameters->member <IntData>( " displayDriverServer:mergeId" , false /* throw if missing */ )->readable ();
463451
464452 // Check if merge ID in map, if not then create display driver and session count pair with merge ID.
465- auto &m = g_mergeMap [m_mergeId.value ()];
453+ auto &m = m_mergeMap [m_mergeId.value ()];
466454 if ( !m.mergeDriver )
467455 {
468456 const IntData *sessionClientsData = parameters->member <IntData>( " displayDriverServer:mergeClients" , true /* throw if missing */ );
0 commit comments