forked from github/server
refactor free_messagelist, fix leak in test_merge_split
This commit is contained in:
parent
1c2922aafa
commit
2abdba9e8a
6 changed files with 32 additions and 22 deletions
|
@ -69,13 +69,17 @@ faction *factions;
|
|||
void free_faction(faction * f)
|
||||
{
|
||||
funhash(f);
|
||||
if (f->msgs)
|
||||
free_messagelist(f->msgs);
|
||||
if (f->msgs) {
|
||||
free_messagelist(f->msgs->begin);
|
||||
free(f->msgs);
|
||||
}
|
||||
while (f->battles) {
|
||||
struct bmsg *bm = f->battles;
|
||||
f->battles = bm->next;
|
||||
if (bm->msgs)
|
||||
free_messagelist(bm->msgs);
|
||||
if (bm->msgs) {
|
||||
free_messagelist(bm->msgs->begin);
|
||||
free(bm->msgs);
|
||||
}
|
||||
free(bm);
|
||||
}
|
||||
|
||||
|
|
|
@ -283,18 +283,15 @@ void syntax_error(const struct unit *u, struct order *ord)
|
|||
|
||||
extern unsigned int new_hashstring(const char *s);
|
||||
|
||||
void free_messagelist(message_list * msgs)
|
||||
void free_messagelist(mlist *msgs)
|
||||
{
|
||||
struct mlist **mlistptr;
|
||||
if (msgs) {
|
||||
for (mlistptr = &msgs->begin; *mlistptr;) {
|
||||
for (mlistptr = &msgs; *mlistptr;) {
|
||||
struct mlist *ml = *mlistptr;
|
||||
*mlistptr = ml->next;
|
||||
msg_release(ml->msg);
|
||||
free(ml);
|
||||
}
|
||||
free(msgs);
|
||||
}
|
||||
}
|
||||
|
||||
message *add_message(message_list ** pm, message * m)
|
||||
|
|
|
@ -37,7 +37,7 @@ extern "C" {
|
|||
struct mlist *begin, **end;
|
||||
} message_list;
|
||||
|
||||
void free_messagelist(message_list * msgs);
|
||||
void free_messagelist(struct mlist *msgs);
|
||||
|
||||
typedef struct msglevel {
|
||||
/* used to set specialized msg-levels */
|
||||
|
|
|
@ -39,7 +39,7 @@ void test_message(CuTest *tc) {
|
|||
|
||||
static void test_merge_split(CuTest *tc) {
|
||||
message_list *mlist = 0, *append = 0;
|
||||
struct mlist **split;
|
||||
struct mlist **split; // TODO: why is this a double asterisk?
|
||||
message_type *mtype = mt_new("custom", NULL);
|
||||
|
||||
test_cleanup();
|
||||
|
@ -57,8 +57,11 @@ static void test_merge_split(CuTest *tc) {
|
|||
CuAssertPtrEquals(tc, append->begin, mlist->begin->next);
|
||||
split_messages(mlist, split);
|
||||
CuAssertPtrEquals(tc, 0, mlist->begin->next);
|
||||
free_messagelist(mlist);
|
||||
free_messagelist(append);
|
||||
free_messagelist(*split);
|
||||
free_messagelist(mlist->begin);
|
||||
free(mlist);
|
||||
free_messagelist(append->begin);
|
||||
free(append);
|
||||
test_cleanup();
|
||||
}
|
||||
|
||||
|
|
|
@ -820,15 +820,18 @@ void free_region(region * r)
|
|||
freeland(r->land);
|
||||
|
||||
if (r->msgs) {
|
||||
free_messagelist(r->msgs);
|
||||
free_messagelist(r->msgs->begin);
|
||||
free(r->msgs);
|
||||
r->msgs = 0;
|
||||
}
|
||||
|
||||
while (r->individual_messages) {
|
||||
struct individual_message *msg = r->individual_messages;
|
||||
r->individual_messages = msg->next;
|
||||
if (msg->msgs)
|
||||
free_messagelist(msg->msgs);
|
||||
if (msg->msgs) {
|
||||
free_messagelist(msg->msgs->begin);
|
||||
free(msg->msgs);
|
||||
}
|
||||
free(msg);
|
||||
}
|
||||
|
||||
|
|
|
@ -286,9 +286,12 @@ struct message * test_find_messagetype(struct message_list *msgs, const char *na
|
|||
}
|
||||
|
||||
void test_clear_messages(faction *f) {
|
||||
free_messagelist(f->msgs);
|
||||
if (f->msgs) {
|
||||
free_messagelist(f->msgs->begin);
|
||||
free(f->msgs);
|
||||
f->msgs = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void disabled_test(void *suite, void (*test)(CuTest *), const char *name) {
|
||||
(void)test;
|
||||
|
|
Loading…
Reference in a new issue