void BURGERCALL LinkedListDelete(LinkedList_t *Input) { if (Input) { LinkedListDestroy(Input); /* Kill the list */ DeallocAPointer(Input); /* Dispose of the structure */ } }
void plugins_initialize( void ) { static char *command = "plugin"; LinkedList_t *list; extBlock = ProtectedDataCreate(); if( !extBlock ) { LogPrintNoArg( LOG_CRIT, "No memory to create plugin extension " "protected structure!!"); exit(1); } extBlock->data = NULL; pluginTree = BalancedBTreeCreate( BTREE_KEY_STRING ); if( !pluginTree ) { return; } list = pluginFindPlugins( "plugin_", ".so" ); db_check_plugins( list ); LinkedListDestroy( list ); LogPrint( LOG_NOTICE, "Plugin path: %s", PLUGIN_PATH ); BalancedBTreeLock( pluginTree ); db_get_plugins( pluginTree ); pluginInitializeTree( pluginTree->root ); BalancedBTreeUnlock( pluginTree ); botCmd_add( (const char **)&command, botCmdPlugin, NULL, NULL ); }
void serverKill( BalancedBTreeItem_t *node, IRCServer_t *server, bool unalloc ) { LinkedListItem_t *listItem, *next; IRCChannel_t *channel; BalancedBTreeItem_t *item; if( server->enabled || server->enabledChanged ) { server->threadAbort = TRUE; thread_deregister( server->txThreadId ); thread_deregister( server->threadId ); server->threadAbort = FALSE; } if( unalloc ) { BalancedBTreeRemove( node->btree, node, LOCKED, FALSE ); } else { server->enabled = FALSE; } if( server->txQueue ) { /* This *might* leak the contents of any queue entries? */ QueueClear( server->txQueue, TRUE ); QueueLock( server->txQueue ); QueueDestroy( server->txQueue ); server->txQueue = NULL; } if( server->channels ) { LinkedListLock( server->channels ); BalancedBTreeLock( server->channelName ); BalancedBTreeLock( server->channelNum ); for( listItem = server->channels->head; listItem; listItem = next ) { next = listItem->next; channel = (IRCChannel_t *)listItem; regexpBotCmdRemove( server, channel ); LinkedListRemove( server->channels, listItem, LOCKED ); item = BalancedBTreeFind( server->channelName, &channel->channel, LOCKED ); if( item ) { BalancedBTreeRemove( server->channelName, item, LOCKED, FALSE ); } item = BalancedBTreeFind( server->channelNum, &channel->channelId, LOCKED ); if( item ) { BalancedBTreeRemove( server->channelNum, item, LOCKED, FALSE ); } ThreadAllNotifyChannel( channel ); cursesMenuItemRemove( 2, MENU_CHANNELS, channel->menuText ); free( channel->menuText ); free( channel->channel ); free( channel->fullspec ); free( channel->url ); free( channel ); } LinkedListDestroy( server->channels ); BalancedBTreeDestroy( server->channelName ); BalancedBTreeDestroy( server->channelNum ); server->channels = NULL; server->channelName = NULL; server->channelNum = NULL; } if( unalloc ) { free( server->server ); free( server->password ); free( server->nick ); free( server->username ); free( server->realname ); free( server->nickserv ); free( server->nickservmsg ); free( server->ircInfo.Server ); } LinkedListLock( server->floodList ); for( listItem = server->floodList->head; listItem; listItem = next ) { next = listItem->next; LinkedListRemove( server->floodList, listItem, LOCKED ); free( listItem ); } LinkedListDestroy( server->floodList ); server->floodList = NULL; ThreadAllNotifyServer( server ); if( unalloc ) { cursesMenuItemRemove( 2, MENU_SERVERS, server->menuText ); free( server->menuText ); free( server->threadName ); free( server->txThreadName ); free( server ); free( node ); } }