@@ -73,8 +73,6 @@ IE_CORE_DEFINERUNTIMETYPED( DisplayDriverServer );
73
73
namespace
74
74
{
75
75
76
- DisplayDriverServer::MergeMap g_mergeMap;
77
-
78
76
/* Set the FD_CLOEXEC flag for the given socket descriptor, so that it will not exist on child processes.*/
79
77
static void fixSocketFlags ( int socketDesc )
80
78
{
@@ -100,7 +98,7 @@ class DisplayDriverServer::Session : public RefCounted
100
98
{
101
99
public:
102
100
103
- Session ( boost::asio::io_service& io_service );
101
+ Session ( boost::asio::io_service& io_service, DisplayDriverServer::MergeMap& mergeMap );
104
102
~Session () override ;
105
103
106
104
boost::asio::ip::tcp::socket& socket ();
@@ -119,7 +117,8 @@ class DisplayDriverServer::Session : public RefCounted
119
117
DisplayDriverPtr m_displayDriver;
120
118
DisplayDriverServerHeader m_header;
121
119
CharVectorDataPtr m_buffer;
122
- std::optional<int > m_mergeId;
120
+ DisplayDriverServer::MergeMap& m_mergeMap;
121
+ std::optional<int > m_mergeId;
123
122
};
124
123
125
124
class DisplayDriverServer ::PrivateData : public RefCounted
@@ -202,7 +201,7 @@ DisplayDriverServer::DisplayDriverServer( DisplayDriverServer::Port portNumber )
202
201
{
203
202
m_data = new DisplayDriverServer::PrivateData ( portNumber );
204
203
205
- DisplayDriverServer::SessionPtr newSession ( new DisplayDriverServer::Session ( m_data->m_service ) );
204
+ DisplayDriverServer::SessionPtr newSession ( new DisplayDriverServer::Session ( m_data->m_service , m_mergeMap ) );
206
205
m_data->m_acceptor .async_accept ( newSession->socket (),
207
206
boost::bind ( &DisplayDriverServer::handleAccept, this , newSession,
208
207
boost::asio::placeholders::error));
@@ -265,17 +264,6 @@ const DisplayDriverServer::PortRange &DisplayDriverServer::registeredPortRange(
265
264
return it->second ;
266
265
}
267
266
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
-
279
267
DisplayDriverServer::Port DisplayDriverServer::portNumber ()
280
268
{
281
269
return m_data->m_acceptor .local_endpoint ().port ();
@@ -297,7 +285,7 @@ void DisplayDriverServer::handleAccept( DisplayDriverServer::SessionPtr session,
297
285
{
298
286
if (!error)
299
287
{
300
- DisplayDriverServer::SessionPtr newSession ( new DisplayDriverServer::Session ( m_data->m_service ) );
288
+ DisplayDriverServer::SessionPtr newSession ( new DisplayDriverServer::Session ( m_data->m_service , m_mergeMap ) );
301
289
m_data->m_acceptor .async_accept ( newSession->socket (),
302
290
boost::bind ( &DisplayDriverServer::handleAccept, this , newSession,
303
291
boost::asio::placeholders::error));
@@ -309,8 +297,8 @@ void DisplayDriverServer::handleAccept( DisplayDriverServer::SessionPtr session,
309
297
* DisplayDriverServer::Session functions
310
298
*/
311
299
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 )
314
302
{
315
303
}
316
304
@@ -386,10 +374,10 @@ void DisplayDriverServer::Session::handleReadHeader( const boost::system::error_
386
374
}
387
375
else
388
376
{
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
390
378
if ( --m.mergeCount <= 0 )
391
379
{
392
- g_mergeMap .erase (m_mergeId.value ());
380
+ m_mergeMap .erase (m_mergeId.value ());
393
381
m_displayDriver->imageClose ();
394
382
}
395
383
}
@@ -462,7 +450,7 @@ void DisplayDriverServer::Session::handleReadOpenParameters( const boost::system
462
450
m_mergeId = parameters->member <IntData>( " displayDriverServer:mergeId" , false /* throw if missing */ )->readable ();
463
451
464
452
// 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 ()];
466
454
if ( !m.mergeDriver )
467
455
{
468
456
const IntData *sessionClientsData = parameters->member <IntData>( " displayDriverServer:mergeClients" , true /* throw if missing */ );
0 commit comments