Eric: Ping?
Gunnar Dalsnes wrote:
From MSDN OVERLAPPED: "Functions such as WriteFile set the event to the nonsignaled state before they begin an I/O operation"
So the ResetEvent additions are meaningless... Why did you add them?
Gunnar
ekohl@svn.reactos.com wrote:
Fix calls to ReadFile and WriteFile for asynchronous I/O.
Modified: trunk/reactos/lib/rpcrt4/rpc_message.c
*Modified: trunk/reactos/lib/rpcrt4/rpc_message.c*
--- trunk/reactos/lib/rpcrt4/rpc_message.c 2005-03-05 11:27:15 UTC (rev 13824) +++ trunk/reactos/lib/rpcrt4/rpc_message.c 2005-03-05 11:38:48 UTC (rev 13825) @@ -265,10 +265,15 @@
} /* transmit packet header */
- if (!WriteFile(Connection->conn, Header, hdr_size, &count, NULL)) {
- ResetEvent(Connection->ovl.hEvent);
- if (!WriteFile(Connection->conn, Header, hdr_size, &count,
&Connection->ovl)) {
WARN("WriteFile failed with error %ld\n", GetLastError()); return GetLastError(); }
- if (!GetOverlappedResult(Connection->conn, &Connection->ovl,
&count, TRUE)) {
WARN("GetOverlappedResult failed with error %ld\n",GetLastError());
return GetLastError();}
/* fragment consisted of header only and is the last one */ if (hdr_size == Header->common.frag_len &&
@@ -277,10 +282,15 @@
} /* send the fragment data */
- if (!WriteFile(Connection->conn, buffer_pos,
Header->common.frag_len - hdr_size, &count, NULL)) {
- ResetEvent(Connection->ovl.hEvent);
- if (!WriteFile(Connection->conn, buffer_pos,
Header->common.frag_len - hdr_size, &count, &Connection->ovl)) {
WARN("WriteFile failed with error %ld\n", GetLastError()); return GetLastError(); }
- if (!GetOverlappedResult(Connection->conn, &Connection->ovl,
&count, TRUE)) {
WARN("GetOverlappedResult failed with error %ld\n",GetLastError());
return GetLastError();}
Header->common.flags &= ~RPC_FLG_FIRST; }
@@ -309,9 +319,15 @@
TRACE("(%p, %p, %p)\n", Connection, Header, pMsg);
/* read packet common header */
- if (!ReadFile(Connection->conn, &common_hdr, sizeof(common_hdr),
&dwRead, NULL)) {
- ResetEvent(Connection->ovl.hEvent);
- if (!ReadFile(Connection->conn, &common_hdr, sizeof(common_hdr),
&dwRead, &Connection->ovl)) {
- WARN("ReadFile failed with error %ld\n", GetLastError());
- status = RPC_S_PROTOCOL_ERROR;
- goto fail;
- }
- if (!GetOverlappedResult(Connection->conn, &Connection->ovl,
&dwRead, TRUE)) {
if (GetLastError() != ERROR_MORE_DATA) {
WARN("ReadFile failed with error %ld\n", GetLastError());
WARN("GetOverlappedResult failed with error %ld\n",GetLastError());
status = RPC_S_PROTOCOL_ERROR; goto fail; }@@ -339,10 +355,16 @@
memcpy(*Header, &common_hdr, sizeof(common_hdr));
/* read the rest of packet header */
ResetEvent(Connection->ovl.hEvent);
if (!ReadFile(Connection->conn, &(*Header)->common + 1,
hdr_length - sizeof(common_hdr), &dwRead, NULL)) {
hdr_length - sizeof(common_hdr), &dwRead,&Connection->ovl)) {
- WARN("ReadFile failed with error %ld\n", GetLastError());
- status = RPC_S_PROTOCOL_ERROR;
- goto fail;
- }
- if (!GetOverlappedResult(Connection->conn, &Connection->ovl,
&dwRead, TRUE)) {
if (GetLastError() != ERROR_MORE_DATA) {
WARN("ReadFile failed with error %ld\n", GetLastError());
WARN("GetOverlappedResult failed with error %ld\n",GetLastError());
status = RPC_S_PROTOCOL_ERROR; goto fail; }@@ -352,6 +374,7 @@
goto fail;}
/* read packet body */ switch (common_hdr.ptype) { case PKT_RESPONSE:
@@ -379,13 +402,20 @@
goto fail; }
- if (data_length == 0) dwRead = 0; else
- if (!ReadFile(Connection->conn, buffer_ptr, data_length, &dwRead,
NULL)) {
if (GetLastError() != ERROR_MORE_DATA) {
- if (data_length == 0) dwRead = 0; else {
ResetEvent(Connection->ovl.hEvent);if (!ReadFile(Connection->conn, buffer_ptr, data_length,&dwRead, &Connection->ovl)) {
WARN("ReadFile failed with error %ld\n", GetLastError()); status = RPC_S_PROTOCOL_ERROR; goto fail; }
if (!GetOverlappedResult(Connection->conn, &Connection->ovl,&dwRead, TRUE)) {
if (GetLastError() != ERROR_MORE_DATA) {WARN("GetOverlappedResult failed with error %ld\n",GetLastError());
status = RPC_S_PROTOCOL_ERROR;goto fail;}}} if (dwRead != data_length) { status = RPC_S_PROTOCOL_ERROR;
@@ -403,10 +433,16 @@
TRACE("next header\n"); /* read the header of next packet */
if (!ReadFile(Connection->conn, *Header, hdr_length, &dwRead,NULL)) {
ResetEvent(Connection->ovl.hEvent);if (!ReadFile(Connection->conn, *Header, hdr_length, &dwRead,&Connection->ovl)) {
WARN("ReadFile failed with error %ld\n", GetLastError());status = GetLastError();goto fail;}if (!GetOverlappedResult(Connection->conn, &Connection->ovl,&dwRead, TRUE)) {
if (GetLastError() != ERROR_MORE_DATA) {
WARN("ReadFile failed with error %ld\n", GetLastError());status = GetLastError();
WARN("GetOverlappedResult failed with error %ld\n",GetLastError());
status = RPC_S_PROTOCOL_ERROR; goto fail; } }
Ros-diffs mailing list Ros-diffs@reactos.com http://reactos.com:8080/mailman/listinfo/ros-diffs
Ros-diffs mailing list Ros-diffs@reactos.com http://reactos.com:8080/mailman/listinfo/ros-diffs