@@ -595,16 +595,16 @@ template <typename Client>
595595void clientDestroy (Client& client)
596596{
597597 if (client.m_context .connection ) {
598- MP_LOG (*client.m_context .loop , Log::Info) << " IPC client destroy " << typeid (client). name ( );
598+ MP_LOG (*client.m_context .loop , Log::Info) << " IPC client destroy " << CxxTypeName (client);
599599 } else {
600- KJ_LOG (INFO, " IPC interrupted client destroy" , typeid (client). name ( ));
600+ KJ_LOG (INFO, " IPC interrupted client destroy" , CxxTypeName (client));
601601 }
602602}
603603
604604template <typename Server>
605605void serverDestroy (Server& server)
606606{
607- MP_LOG (*server.m_context .loop , Log::Info) << " IPC server destroy " << typeid (server). name ( );
607+ MP_LOG (*server.m_context .loop , Log::Info) << " IPC server destroy " << CxxTypeName (server);
608608}
609609
610610// ! Entry point called by generated client code that looks like:
@@ -740,6 +740,7 @@ kj::Promise<void> serverInvoke(Server& server, CallContext& call_context, Fn fn)
740740 using ServerContext = ServerInvokeContext<Server, CallContext>;
741741 using ArgList = typename ProxyClientMethodTraits<typename Params::Reads>::Params;
742742 ServerContext server_context{server, call_context, req};
743+ auto self = server.thisCap ();
743744 // ReplaceVoid is used to support fn.invoke implementations that
744745 // execute asynchronously and return promises, as well as
745746 // implementations that execute synchronously and return void. The
@@ -749,16 +750,16 @@ kj::Promise<void> serverInvoke(Server& server, CallContext& call_context, Fn fn)
749750 // and waiting for it to complete.
750751 return ReplaceVoid ([&]() { return fn.invoke (server_context, ArgList ()); },
751752 [&]() { return kj::Promise<CallContext>(kj::mv (call_context)); })
752- .then ([&server, req](CallContext call_context) {
753+ .then ([&server, req, self ](CallContext call_context) {
753754 MP_LOG (*server.m_context .loop , Log::Debug) << " IPC server send response #" << req << " " << TypeName<Results>();
754755 MP_LOG (*server.m_context .loop , Log::Trace) << " response data: "
755756 << LogEscape (call_context.getResults ().toString (), server.m_context .loop ->m_log_opts .max_chars );
756- }, [&server, req](::kj::Exception&& e) {
757+ }). catch_ ( [&server, req, self ](::kj::Exception&& e) -> kj::Promise< void > {
757758 // Call failed for some reason. Cap'n Proto will try to send
758759 // this error to the client as well, but it is good to log the
759760 // failure early here and include the request number.
760761 MP_LOG (*server.m_context .loop , Log::Error) << " IPC server error request #" << req << " " << TypeName<Results>()
761- << " " << kj::str (" kj::Exception: " , e).cStr ();
762+ << " " << kj::str (" kj::Exception: " , e. getDescription () ).cStr ();
762763 return kj::mv (e);
763764 });
764765 } catch (const std::exception& e) {
0 commit comments