Ok, so I'm trying to rid FreeBSD of the unp_gc() junk in uipc_usrreq.c
I just realized why I'm leaking file descriptors:
Only mbufs with external storage can have a 'free' function, the
problem is that for the most part when passing a single fd I'm only
using a single mbuf to pass my data around, my ext_free routine is
probably never called, and on top of that I'm probably corrupting
my mbuf by using it when I shouldn't be.
This is terrible, what should be a simple free() hook is now my
worst nightmare. A couple of options come to mind:
a) always have a free hook, the extra if (m->m_freehook != NULL)
check can't be that expensive.
b) a macro to make an mbuf into an mbuf cluster that points to itself,
it should check to see if it has enough room to shuffle the data
and return an error if it can't accomidate both the data and the
expanded mbug header.
I like 'a' but would be willing to deal with 'b' as we've never
had a need for this, although that would mean copying about the
size of an mbuf in the worst case when a subsystem needs this
facility.
Suggestions? Comments?
--
-Alfred Perlstein - [[EMAIL PROTECTED]|[EMAIL PROTECTED]]
"I have the heart of a child; I keep it in a jar on my desk."
To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-net" in the body of the message