http://bugs.winehq.org/show_bug.cgi?id=16162
Colin Pitrat colin.pitrat@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |colin.pitrat@gmail.com
--- Comment #7 from Colin Pitrat colin.pitrat@gmail.com 2009-02-17 14:41:14 --- I confirm that I have the same problem under archlinux with wine 1.1.15.
From wine sources, it seems that the "partial write: 64" comes from a call to
writev in (ntdll/server.c): static unsigned int send_request( const struct __server_request_info *req )
Strange thing is, from strace output, it seems the writev send 1 buffer of length 64, which means the whole content is written: writev(3, [{"\32\0\0\0\230\3763\0\320\3763\0(\0\0\0\1\0\0\0\0@\375\177\30\30\350~\0\0\0\0\0"..., 64}], 1) = 64
Looking at the source code if ((ret = writev( ntdll_get_thread_data()->request_fd, vec, i+1 )) == req->u.req.request_header.request_size + sizeof(req->u.req)) return STATUS_SUCCESS;
it would mean that the left hand of the comparison does not correspond to the size of the buffer. As sizeof(req->u.req) is the 64 passed to writev, it may comes from req->u.req.request_header.request_size being non-zero.
This is confirmed by the fact that we're in the else part of a if(!req->u.req.request_header.request_size)
To sum up, it seems that only the header is sent, i.e. the request data_count is 0 whereas the request_size is not 0. I don't know where this invalid request could come from.