--- dispatch.c (revision 360336) +++ dispatch.c (working copy) @@ -474,14 +474,19 @@ void remove_protocol(struct protocol *proto) { - struct protocol *p, *next; + struct protocol *p, *q; - for (p = protocols; p; p = next) { - next = p->next; + q = NULL; + for (p = protocols; p; p = p->next) { if (p == proto) { - protocols = p->next; + if (q) + q->next=p->next; + else + protocols = p->next; free(p); + break; } + q = p; } }