Ticket #9122: win_iocp_handle_service.ipp.patch

File win_iocp_handle_service.ipp.patch, 1.8 KB (added by smueller@…, 9 years ago)

Suggested fix (untested at time of post)

  • E:/lib/boost_1_53_0/1.53/boost/asio/detail/impl/win_iocp_handle_service.

    old new  
    364364    // A request to write 0 bytes on a handle is a no-op.
    365365    iocp_service_.on_completion(op);
    366366  }
    367367  else
    368368  {
     369    DWORD bytes_transferred = 0;
    369370    op->Offset = offset & 0xFFFFFFFF;
    370371    op->OffsetHigh = (offset >> 32) & 0xFFFFFFFF;
    371372    BOOL ok = ::WriteFile(impl.handle_,
    372373        boost::asio::buffer_cast<LPCVOID>(buffer),
    373374        static_cast<DWORD>(boost::asio::buffer_size(buffer)),
    374         NULL, op);
     375        &bytes_transferred, op);
    375376    DWORD last_error = ::GetLastError();
    376377    if (!ok && last_error != ERROR_IO_PENDING
    377378        && last_error != ERROR_MORE_DATA)
    378379    {
    379       iocp_service_.on_completion(op, last_error, NULL);
     380      iocp_service_.on_completion(op, last_error, bytes_transferred);
    380381    }
    381382    else
    382383    {
    383384      iocp_service_.on_pending(op);
    384385    }
     
    471472    // A request to read 0 bytes on a handle is a no-op.
    472473    iocp_service_.on_completion(op);
    473474  }
    474475  else
    475476  {
     477    DWORD bytes_transferred = 0;
    476478    op->Offset = offset & 0xFFFFFFFF;
    477479    op->OffsetHigh = (offset >> 32) & 0xFFFFFFFF;
    478480    BOOL ok = ::ReadFile(impl.handle_,
    479481        boost::asio::buffer_cast<LPVOID>(buffer),
    480482        static_cast<DWORD>(boost::asio::buffer_size(buffer)),
    481         NULL, op);
     483        &bytes_transferred, op);
    482484    DWORD last_error = ::GetLastError();
    483485    if (!ok && last_error != ERROR_IO_PENDING
    484486        && last_error != ERROR_MORE_DATA)
    485487    {
    486       iocp_service_.on_completion(op, last_error, NULL);
     488      iocp_service_.on_completion(op, last_error, bytes_transferred);
    487489    }
    488490    else
    489491    {
    490492      iocp_service_.on_pending(op);
    491493    }