I did try to avoid possible issues: Initially, some objects used by libuv were 
created as a `ref` object and then casted to `ptr` (which you shouldn't do it, 
I know), but now `alloc` is always used so everything is correct. I have also 
replaced the memory management functions used by the library from malloc to 
Nim's allocators so the context of the pointers should be the same (Yes, I have 
tested the program with `-d:useMalloc`, the result is the same), and made sure 
ARC doesn't deallocate futures by using `GC_ref` ad `GC_unref`

Regarding the code inside the event loop: it's possible that exceptions might 
be messing with it, but even unhandled exceptions are not managed at all (the 
program doesn't quit), which shouldn't be a problem. If it matters, the 
variable containing the loop is a global one, and is automatically destroyed 
with the destroy hook

Reply via email to