Jinoh Kang (@iamahuman) commented about server/sock.c:
struct fd *fd; if (!sock) return;
- if (sock->fixup_type != req->fixup_type)
- {
/* Protocol fixup information should be reflected in client's async data before the
* async is delivered to process. So let the client set up the info and restart the
* call. */
reply->fixup_type = sock->fixup_type;
set_error( STATUS_MORE_PROCESSING_REQUIRED );
release_object( sock );
return;
- }
We can save the `fixup_type` round trip in the optimal case by returning `STATUS_MORE_PROCESSING_REQUIRED` _only_ when the async would otherwise enter the pending state (i.e. final `status` is `STATUS_PENDING`), and setting `reply->fixup_type` in all cases (specifically, `status == STATUS_ALERTED`).
Not sure if this improvement would be worth it, though, especially since
1) it doesn't eliminate `STATUS_MORE_PROCESSING_REQUIRED` (the raison d'��tre of which being that can't pass extra info via `APC_ASYNC_IO`, and we can't normally synchronize with the APC either, since it's asynchronous by nature) completely, and thus doesn't help simplify the patch, 2) not many tools rely on ICMP packet performace (save for a few network testing tools), and 3) server calls make us lose in the first place.