apr-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Kevin Pilch-Bisson <ke...@pilch-bisson.net>
Subject Re: pipe hanging on win32
Date Tue, 01 Oct 2002 15:59:48 GMT
Quoting brane@xbc.nu:

> Quoting Kevin Pilch-Bisson <kevin@pilch-bisson.net>:
> 
> > I've attached a short example of what I am trying to do on in svn for
> > the  benefit of any apr folks who may be able to look at this.
> > 
> > Basically I'm calling the run_pre_revprop_change_hook(), and it's
> > hanging in apr_file_flush(...) specifically in FlushFileBuffers it seems.
> > 
> > The hook script (shown below), is hanging in getc().
> > 
> > Any ideas why this isn't working?
> > 
> > Note that log.txt never includes anything from stdin.
> > 
> > int main(int argc, char **argv)
> > {
> > 	std::ofstream file("log.txt");
> > 	file << "Repos is: " << argv[1] << std::endl;
> > 	file << "Rev is: " << argv[2] << std::endl;
> > 	file << "Propname is: " << argv[3] << std::endl;
> > 	while (!std::cin.eof()) {
> > 		std::string s;
> > 		std::cin >> s;
> 
> IIRC this is a fairly well-known bug in MS's implementation of the iostream
> library. It hangs in getc() because it doesn't check for end-of-file
> correctly.

Well that's fine except that the same thing happens in a propval with no line 
endings, or with DOS line endings or with Unix line endings.
> 
> > 		file << s << std::endl;
> 
> BTW, why are you breaking lines in the prop value like this? "std::cin >>
> s"
> will _not_ read a whole line of input.

I know, at this point I was just trying to see whether the hook got any input 
at all.
> 
> > 	}
> > 	file << std::ends;
> 
> Hm. Stuffing nulls into text files is not nice, either.
Doh! That was a mistake.
> 
> > 	file.close();
> > 	return 0;
> > }
> 
> 
> Anyway. Try rewriting that hook of yours in C, with appropriate eof checking.
> It
> has a good chance of working then. Or you might try to use "std::getline(cin,
> s,
> '\n')", maybe that doesn't tickle the same bug -- not to mention that lines
> will
> be broken correctly.
> 
>     Brane
I don't think that's what the problem is.  My perl script which copied stdin 
to the log file had the same problem, I wrote the above hook just so that I 
could attach to it and see where it was hanging.

--
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Kevin Pilch-Bisson
kevin@pilch-bisson.net
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Mime
View raw message