Add Channel_Free().
Central function to free a channel structure and all its resources (invite/ban lists, topic, ...).
This commit is contained in:
parent
0659503afd
commit
40a0e9abbe
@ -57,7 +57,8 @@ static CL2CHAN *Add_Client PARAMS(( CHANNEL *Chan, CLIENT *Client ));
|
|||||||
static bool Remove_Client PARAMS(( int Type, CHANNEL *Chan, CLIENT *Client, CLIENT *Origin, const char *Reason, bool InformServer ));
|
static bool Remove_Client PARAMS(( int Type, CHANNEL *Chan, CLIENT *Client, CLIENT *Origin, const char *Reason, bool InformServer ));
|
||||||
static CL2CHAN *Get_First_Cl2Chan PARAMS(( CLIENT *Client, CHANNEL *Chan ));
|
static CL2CHAN *Get_First_Cl2Chan PARAMS(( CLIENT *Client, CHANNEL *Chan ));
|
||||||
static CL2CHAN *Get_Next_Cl2Chan PARAMS(( CL2CHAN *Start, CLIENT *Client, CHANNEL *Chan ));
|
static CL2CHAN *Get_Next_Cl2Chan PARAMS(( CL2CHAN *Start, CLIENT *Client, CHANNEL *Chan ));
|
||||||
static bool Delete_Channel PARAMS(( CHANNEL *Chan ));
|
static void Delete_Channel PARAMS(( CHANNEL *Chan ));
|
||||||
|
static void Channel_Free PARAMS(( CHANNEL *Chan ));
|
||||||
|
|
||||||
|
|
||||||
GLOBAL void
|
GLOBAL void
|
||||||
@ -146,6 +147,17 @@ Channel_InitPredefined( void )
|
|||||||
} /* Channel_InitPredefined */
|
} /* Channel_InitPredefined */
|
||||||
|
|
||||||
|
|
||||||
|
static void
|
||||||
|
Channel_Free(CHANNEL *chan)
|
||||||
|
{
|
||||||
|
array_free(&chan->topic);
|
||||||
|
Lists_Free(&chan->list_bans);
|
||||||
|
Lists_Free(&chan->list_invites);
|
||||||
|
|
||||||
|
free(chan);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
GLOBAL void
|
GLOBAL void
|
||||||
Channel_Exit( void )
|
Channel_Exit( void )
|
||||||
{
|
{
|
||||||
@ -154,11 +166,9 @@ Channel_Exit( void )
|
|||||||
|
|
||||||
/* free struct Channel */
|
/* free struct Channel */
|
||||||
c = My_Channels;
|
c = My_Channels;
|
||||||
while( c )
|
while (c) {
|
||||||
{
|
|
||||||
c_next = c->next;
|
c_next = c->next;
|
||||||
array_free(&c->topic);
|
Channel_Free(c);
|
||||||
free( c );
|
|
||||||
c = c_next;
|
c = c_next;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1070,7 +1080,7 @@ Get_Next_Cl2Chan( CL2CHAN *Start, CLIENT *Client, CHANNEL *Channel )
|
|||||||
/**
|
/**
|
||||||
* Remove a channel and free all of its data structures.
|
* Remove a channel and free all of its data structures.
|
||||||
*/
|
*/
|
||||||
static bool
|
static void
|
||||||
Delete_Channel(CHANNEL *Chan)
|
Delete_Channel(CHANNEL *Chan)
|
||||||
{
|
{
|
||||||
CHANNEL *chan, *last_chan;
|
CHANNEL *chan, *last_chan;
|
||||||
@ -1083,23 +1093,19 @@ Delete_Channel(CHANNEL *Chan)
|
|||||||
last_chan = chan;
|
last_chan = chan;
|
||||||
chan = chan->next;
|
chan = chan->next;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
assert(chan != NULL);
|
||||||
if (!chan)
|
if (!chan)
|
||||||
return false;
|
return;
|
||||||
|
|
||||||
Log(LOG_DEBUG, "Freed channel structure for \"%s\".", Chan->name);
|
|
||||||
|
|
||||||
array_free(&chan->topic);
|
|
||||||
Lists_Free(&chan->list_bans);
|
|
||||||
Lists_Free(&chan->list_invites);
|
|
||||||
|
|
||||||
/* maintain channel list */
|
/* maintain channel list */
|
||||||
if (last_chan)
|
if (last_chan)
|
||||||
last_chan->next = chan->next;
|
last_chan->next = chan->next;
|
||||||
else
|
else
|
||||||
My_Channels = chan->next;
|
My_Channels = chan->next;
|
||||||
free(chan);
|
|
||||||
|
|
||||||
return true;
|
LogDebug("Freed channel structure for \"%s\".", Chan->name);
|
||||||
|
Channel_Free(Chan);
|
||||||
} /* Delete_Channel */
|
} /* Delete_Channel */
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user