Seigo Tanimura wrote:
> A quick and hopefully efficient solution to those problems is to
> fhold() struct file's first, then enter polling loop. That seems much
> cheaper than to work on free()ing a vnode or a socket with holding a
> process lock, provided that struct filedesc and file are protected
> properly (and we have to do it anyway).
Let me once again point out that fhold(), like crhold(),
should act as an l-valued function that takes an r-value
as an "argument", as in:
a = crhold(b);
q = fhold(r);
etc. (for all such functions).
The reason is that you can not replace it with an instrumented
function, otherwise, which would permit you to catch subtle
errors that:
a = b;
crhold(a);
q = r;
fhold(r);
etc. may cause (yes, I know I have held the r-calue in one
case and the l-value in the other in the above example; the
kernel itself does this all over the place, and I think it's
an error).
I also think that they should use common base macros: it is
exceedingly dangerous to have multiple hold semantics in the
kernel.
-- Terry
To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-current" in the body of the message