On Thu, Feb 24, 2011 at 12:25:16PM +0000, Carlo Marcelo Arenas Belon wrote:
> On Wed, Feb 23, 2011 at 09:42:56AM -0800, Bernard Li wrote:
> >
> > 123 read:
> > 124 read_len = read(fd, db, buflen);
> > 125 if (read_len <= 0)
> > 126 {
> > 127 if (errno == EINTR)
> > 128 goto read;
> > 129 err_ret("slurpfile() read() error on file %s", filename);
> > 130 close(fd);
> > 131 return SYNAPSE_FAILURE;
> > 132 }
>
> this code is not relevant as it is only called when EINTR is received
> because a signal interrupts the read call (very unlikely)
Shouldn't this be "if (read_len < 0)", a return of zero from read is
possible (EOF for example). If slurpfile is called with buffer=NULL and
buffsize equal or a multiple of the file size then we get
SYNAPSE_FAILURE. The errno check will be against an old value of errno
in this which makes it more likely to hit (still very unlikely though :)
and then we have an infinite loop...
Kostas
------------------------------------------------------------------------------
Free Software Download: Index, Search & Analyze Logs and other IT data in
Real-Time with Splunk. Collect, index and harness all the fast moving IT data
generated by your applications, servers and devices whether physical, virtual
or in the cloud. Deliver compliance at lower cost and gain new business
insights. http://p.sf.net/sfu/splunk-dev2dev
_______________________________________________
Ganglia-developers mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ganglia-developers