|
From: | SHEN Feng |
Subject: | xdr_opaque becoms unsafe in multithreaded program |
Date: | Thu, 5 Jun 2003 08:23:38 +0800 |
Hi,
I'm rather strange that xdr_opaque() uses a static
buffer crud for XDR_GETBYTES() processing.
This may cause the function becomes unsafe in
multithreaded program. So I think crud should be defined non-static.
/*
* XDR opaque data * Allows the specification of a fixed size sequence of opaque bytes. * cp points to the opaque object and cnt gives the byte length. */ bool_t xdr_opaque (XDR *xdrs, caddr_t cp, u_int cnt) { u_int rndup; static char crud[BYTES_PER_XDR_UNIT]; /*
* if no data we are done */ if (cnt == 0) return TRUE; /*
* round byte count to full xdr units */ rndup = cnt % BYTES_PER_XDR_UNIT; if (rndup > 0) rndup = BYTES_PER_XDR_UNIT - rndup; switch (xdrs->x_op)
{ case XDR_DECODE: if (!XDR_GETBYTES (xdrs, cp, cnt)) { return FALSE; } if (rndup == 0) return TRUE; return XDR_GETBYTES (xdrs, (caddr_t)crud, rndup); case XDR_ENCODE:
if (!XDR_PUTBYTES (xdrs, cp, cnt)) { return FALSE; } if (rndup == 0) return TRUE; return XDR_PUTBYTES (xdrs, xdr_zero, rndup); case XDR_FREE:
return TRUE; } return FALSE; } INTDEF(xdr_opaque) B.R.
SHEN Feng |
[Prev in Thread] | Current Thread | [Next in Thread] |