
On Mon, 01 Sep 2008 17:44:56 +0200, Ion GaztaƱaga <igaztanaga@gmail.com> wrote:
Boris wrote:
-> Using named pipes has been problematic because it returns errors when launching multiple processes aggressively: Error 231 - All Pipes are Busy. This does not happen with anonymous pipes and I think it has some relationship with the guid code. By the way, I think a uuid library is too much to create a unique identifier to be shared with the child a simple atomic count would to the job in my opinion. That would reduce Boost.Process dependencies. An atomic count might not be sufficient as it would be unique only per process. As I used Boost.Uuid only for convenience though I'll replace it with an atomic count plus a random number to drop the dependency.
The PID of the parent plus an atomic count wouldn't be enough?
I had the same idea first. But as the pipe class doesn't know the PID in the process class I thought a random number should be fine, too. However we can call of course getpid() and a Windows function if you prefer not to use a random number.
-> systembuf::close() should call sync() to push the last charaters into the pipe, othewise, characters are lost if the user does not flush the stream. Changed (in postream::close()).
I think we must change this in systembuf, because a user might use the streambuf directly and it would be surprised to see that unlike std::filebuf, already written characters are missed.
Ah, I thought it was a typo as there is no close() method in systembuf. As systembuf is derived from std::streambuf which doesn't provide close() either I was pretty sure you meant postream::close()? Boris