void CCONV CPhidget_free(void *arg) { CPhidgetHandle phid = (CPhidgetHandle)arg; if (!phid) return; //Call device specific free function if it exists if(phid->fptrFree) phid->fptrFree(phid); //this is only malloc-ed on windows and linux, not wince or mac #if (defined(_WINDOWS) && !defined(WINCE)) || defined(_LINUX) if (phid->CPhidgetFHandle) { CPhidgetFHandle_free(phid->CPhidgetFHandle); phid->CPhidgetFHandle = NULL; } #endif CThread_mutex_destroy(&phid->lock); CThread_mutex_destroy(&phid->openCloseLock); CThread_mutex_destroy(&phid->writelock); CThread_mutex_destroy(&phid->outputLock); CThread_destroy_event(&phid->writeAvailableEvent); CThread_destroy_event(&phid->writtenEvent); free(phid); phid = NULL; return; }
void CPhidgetManager_free(void *arg) { CPhidgetManagerHandle phidm = (CPhidgetManagerHandle)arg; if(!phidm) return; if(CPhidget_statusFlagIsSet(phidm->status, PHIDGET_REMOTE_FLAG)) { CList_emptyList((CListHandle *)phidm->AttachedPhidgets, PTRUE, CPhidget_free); } CThread_mutex_destroy(&phidm->lock); CThread_mutex_destroy(&phidm->openCloseLock); free(phidm); phidm = NULL; return; }
void CPhidgetDictionary_free(void *arg) { CPhidgetDictionaryHandle dict = arg; if(!dict) return; CThread_mutex_lock(&dict->listenersLock); CList_emptyList((CListHandle *)&dict->listeners, PTRUE, CPhidgetDictionaryListener_free); CThread_mutex_unlock(&dict->listenersLock); CThread_mutex_destroy(&dict->lock); CThread_mutex_destroy(&dict->listenersLock); CThread_mutex_destroy(&dict->openCloseLock); free(dict); dict = NULL; }