CDllDrvObj::~CDllDrvObj() { LOCK_MUTEX( m_objMutex ); for ( int i = 0; i<VSCP_LOGGER_DRIVER_MAX_OPEN; i++ ) { if ( NULL == m_drvObjArray[ i ] ) { CRawEthernet *pdrvObj = getDriverObject( i ); if ( NULL != pdrvObj ) { pdrvObj->close(); delete m_drvObjArray[ i ]; m_drvObjArray[ i ] = NULL; } } } UNLOCK_MUTEX( m_objMutex ); #ifdef WIN32 CloseHandle( m_objMutex ); #else pthread_mutex_destroy( &m_objMutex ); #endif }
extern "C" int VSCPClose(long handle) { int rv = 0; CRawEthernet *pdrvObj = theApp.getDriverObject(handle); if (NULL == pdrvObj) return 0; pdrvObj->close(); theApp.removeDriverObject(handle); rv = 1; return CANAL_ERROR_SUCCESS; }
CVSCPDrvApp::~CVSCPDrvApp() { LOCK_MUTEX(m_objMutex); for (int i = 0; i < VSCP_RAWETHERNET_DRIVER_MAX_OPEN; i++) { if (NULL == m_prawethernetArray[ i ]) { CRawEthernet *psockcan = getDriverObject(i); if (NULL != psockcan) { psockcan->close(); delete m_prawethernetArray[ i ]; m_prawethernetArray[ i ] = NULL; } } } UNLOCK_MUTEX(m_objMutex); pthread_mutex_destroy(&m_objMutex); }