http://bugs.winehq.org/show_bug.cgi?id=17195
--- Comment #104 from Adam Martinson adam.r.martinson@gmail.com 2012-12-20 16:10:55 CST --- (In reply to comment #103)
It's still not quite clear what exactly that patch changes. Am I right that the main part is adding pipe_end_flush and pipe_end_ioctl, and making both pipe ends use the same set of fd_ops? If so, you could split the cosmetic changes (i.e. everything else) into a separate patch after that one. Yes, that probably means you will need to add some code in one patch only to delete it in the next one, but that should improve readability considerably.
Sort of. Basically both ends of the pipe behave more or less the same, so it moves the stuff that's shared into the pipe_server object and the stuff that's specific to each end into the pipe_end object. Perhaps I should rename pipe_server to pipe_instance in the 1st patch? I could also and an enum for which end is which (enum { pe_server, pe_client };).
The major change becomes using the pipe_end object for both the client and server ends, and I don't think there's any way to do that without changing it everywhere at once. The addition of pipe_end_ioctl() really just takes over FSCTL_PIPE_DISCONNECT from pipe_server_ioctl(), because pipe_server_ioctl will only be called if the pipe isn't connected. pipe_end_flush() is really just a rename of pipe_server_flush(), and becomes usable from either end.