Dispatch returns a result envelope

dpm_execute fills a dpm_result on every call: status and error_code
from the module's return value, and a payload the module hands back
through dpm_set_result. The payload's layout belongs to the module and
is documented per command; its release function is carried in the
envelope and invoked by dpm_result_release. The context keeps a stack
of the envelopes in progress, so a module calling a peer receives the
peer's payload in its own envelope and its caller sees only what the
module sets itself.

The good fixture returns a payload and counts its releases, and the
modules test covers the envelope fields, the payload round trip, single
release, discard on a NULL envelope, and a payload set outside any
dispatch. The prose documents describe the envelope and the payload
header a module ships.
This commit is contained in:
2026-09-07 14:53:24 -04:00
parent 0291e61fd8
commit 55c852586b
13 changed files with 404 additions and 39 deletions

View File

@@ -27,6 +27,7 @@
#include <map>
#include <memory>
#include <string>
#include <vector>
#include "internal/metadata.hpp"
#include "internal/modules.hpp"
@@ -73,6 +74,9 @@ struct dpm_ctx {
/** Reason for the most recent failure. */
std::string last_error;
/** Envelopes of the dispatches in progress, innermost last. */
std::vector<dpm_result*> result_frames;
};
/**