A bit of digging found that the pointer value did point to a valid method_t structure instance - but something free'd it. Hm. A little further digging found what was going on:
- A METHOD_OTHER appeared (an RTSP method) which resulted in a new method_t being malloc'ed;
- The pointer was copied to the request_t structure;
- The request was processed;
- The initial method_t pointer was freed, but the request_t method pointer still pointed to it;
- The logging code then logged the stuff said request_t method pointer pointed to - but it was already free'd. Sometimes it'd be junk, sometimes it'd be the original contents.
So I've been quite busy tidying up the method handling code in preparation for the change in how they're handled. LUSCA_HEAD now has some code which logs potential memory leaks when handling the dynamic methods. I'm going to see if I can come up with a way (or two) to log potential risky situations when items are dereferenced after being free'd. But hopefully I can fix the issue without introducing any further bugs.
No comments:
Post a Comment