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
Ganglia-developers@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ganglia-developers

Reply via email to