error_t socketInit(void) { uint_t i; uint_t j; //Create a mutex to prevent simultaneous access to sockets if(!osCreateMutex(&socketMutex)) { //Failed to create mutex return ERROR_OUT_OF_RESOURCES; } //Initialize socket related data memset(socketTable, 0, sizeof(socketTable)); //Loop through socket descriptors for(i = 0; i < SOCKET_MAX_COUNT; i++) { //Set socket identifier socketTable[i].descriptor = i; //Create an event object to track socket events if(!osCreateEvent(&socketTable[i].event)) { //Clean up side effects for(j = 0; j < i; j++) osDeleteEvent(&socketTable[j].event); //Delete mutex osDeleteMutex(&socketMutex); //Report an error return ERROR_OUT_OF_RESOURCES; } } //Successful initialization return NO_ERROR; }
error_t ipv4Init(NetInterface *interface) { //Use default MTU interface->ipv4Config.mtu = interface->nicDriver->mtu; //Identification field is primarily used to identify //fragments of an original IP datagram interface->ipv4Identification = 0; //Create a mutex to prevent simultaneous access to the IPv4 filter table if(!osCreateMutex(&interface->ipv4FilterMutex)) { //Failed to create mutex return ERROR_OUT_OF_RESOURCES; } //Clear IPv4 filter table contents memset(interface->ipv4Filter, 0, sizeof(interface->ipv4Filter)); //No entry in the filter table interface->ipv4FilterSize = 0; #if (IPV4_FRAG_SUPPORT == ENABLED) //Create a mutex to prevent simultaneous access to the reassembly queue if(!osCreateMutex(&interface->ipv4FragQueueMutex)) { //Clean up side effects osDeleteMutex(&interface->ipv4FilterMutex); //Report an error return ERROR_OUT_OF_RESOURCES; } //Clear the reassembly queue memset(interface->ipv4FragQueue, 0, sizeof(interface->ipv4FragQueue)); #endif //Successful initialization return NO_ERROR; }
/////////////////////////////////////////////////////////////////////// // Class : CIrradianceCache // Method : ~CIrradianceCache // Description : Dtor // Return Value : // Comments : CIrradianceCache::~CIrradianceCache() { osDeleteMutex(mutex); // Are we writing the file out ? if (flags & CACHE_WRITE) { if (name[0] != 0) { FILE *out = ropen(name,"wb",fileIrradianceCache); if (out != NULL) { // Write the samples fwrite(&maxDepth, sizeof(int),1,out); writeNode(out,root); fclose(out); } } } // Delete the memory pool delete memory; }