On Mon, Jul 6, 2020 at 8:02 AM Vitali Lovich <[email protected]> wrote:

> On Sun, Jul 5, 2020 at 3:02 PM Kenton Varda <[email protected]> wrote:
>
>> On Sun, Jul 5, 2020 at 1:48 PM Vitali Lovich <[email protected]> wrote:
>>
>>> Yeah, so I'm still working through getting executeSync working. I do
>>> wish executeAsync would still be able to do the right thing when invoked
>>> from off-thread to avoid creating artificial synchronization points, but I
>>> can see it being challenging to accomplish something like that without
>>> adding synchronization into the happy path too. Basically the challenges
>>> I'm having is trouble terminating the event loop of a server. I *think* the
>>> answer I've stumbled upon is to wrap any futures I schedule with a
>>> cancellation object that I then cancel when I go to shut down the thread.
>>> I'm now seeing a crash on the non shutdown path though that I'm trying to
>>> figure out.
>>>
>>
>> Make sure you're using Executor::addRef() to take a strong reference from
>> the calling thread. Then if the receiving thread quits, the calling thread
>> should get a DISCONNECTED exception, but shouldn't crash.
>>
> Am I missing something? Executor doesn't inherit from refcount...
>

It has a method `addRef()`:
https://github.com/capnproto/capnproto/blob/0050fd757683f140b4a07fdc3eab986db0d00c8d/c++/src/kj/async.h#L764

This was added fairly recently, though. Maybe it wasn't in 0.8.0.


>  Yeah, that's what I figured. The KJ API is soooo much more user friendly
> though :). It would be cool to be able to consume the raw file
> descriptor/socket out of the pipes the LowlevelIoProvider constructs to
> simplify code/error handling.
>

Yeah, I think adding `kj::Maybe<int> getFd();` (and `kj::Maybe<void*>
getHandle();` on Windows) to the `AsyncIoStream` interface is probably
something we should do. I resisted this for a long time since it breaks the
abstraction a bit, but there's just too many places where it would be
useful, especially for interoperability and optimizations.

-Kenton

-- 
You received this message because you are subscribed to the Google Groups 
"Cap'n Proto" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/capnproto/CAJouXQ%3DgpMYV741mpGJ5EKyJb51rS8t-5r%3Dz5hWgGf%3Df1W06BA%40mail.gmail.com.

Reply via email to