bug-glibc
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

xdr_opaque becoms unsafe in multithreaded program


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

reply via email to

[Prev in Thread] Current Thread [Next in Thread]