diff --git a/src/client.cpp b/src/client.cpp index e8762d3..6f89f05 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -319,7 +319,7 @@ OperationBase::~OperationBase() {} const std::string& OperationBase::name() { - return chan->name; + return channelName; } Value OperationBase::wait(double timeout) diff --git a/src/clientget.cpp b/src/clientget.cpp index 0e5dcb2..3f7374d 100644 --- a/src/clientget.cpp +++ b/src/clientget.cpp @@ -584,6 +584,7 @@ std::shared_ptr gpr_setup(const std::shared_ptr& context { auto internal(std::move(op)); internal->internal_self = internal; + internal->channelName = name; std::shared_ptr external(internal.get(), [internal, syncCancel](GPROp*) mutable { // (maybe) user thread diff --git a/src/clientimpl.h b/src/clientimpl.h index 04931d7..86a9517 100644 --- a/src/clientimpl.h +++ b/src/clientimpl.h @@ -46,6 +46,7 @@ struct OperationBase : public Operation const evbase loop; // remaining members only accessibly from loop worker std::shared_ptr chan; + std::string channelName; uint32_t ioid = 0; Value result; bool done = false; diff --git a/test/testget.cpp b/test/testget.cpp index bd722d6..66dbb36 100644 --- a/test/testget.cpp +++ b/test/testget.cpp @@ -313,6 +313,15 @@ struct Tester { op.reset(); } + void name() + { + testShow()<<__func__; + + auto op = cli.get("nonexistent").exec(); + auto op_name = op->name(); + testEq(op_name, "nonexistent"); + } + void manualExec() { testShow()<<__func__; @@ -516,7 +525,7 @@ void testError(bool phase) MAIN(testget) { - testPlan(62); + testPlan(63); testSetup(); logger_config_env(); const bool canIPv6 = pvxs::impl::evsocket::canIPv6; @@ -533,6 +542,7 @@ MAIN(testget) Tester().cancel(); Tester().asyncCancel(); Tester().orphan(); + Tester().name(); Tester().manualExec(); Tester().badRequest(); Tester().delayExec();