Open darkleaf opened 4 years ago
why fake ?
Coroutine may be broken(suspended) inside locking form. It may make some problems or not.
If you can add real implementation it will be cool.
At first glance I'd say the benefits of having it outweight the risks.
BTW threads give you the same footgun, nothing prevents you to write (locking x (Thread/sleep Long/MAX_VALUE))
Agree
thanks
Actually, the fix doesn't work on latest runtimes, because Unsafe/monitorEnter
and Unsafe/monitorExit
have been ditched.
We can't rely on JVM opcodes monitorEnter/monitorExit because the JVM spec allows runtimes to throw IllegalMonitorStateException if a monitor is not properly balanced at the method level.
I reopen this one until we find an acceptable workaround.
No matching method monitorExit found taking 1 args for class
sun.misc.Unsafe
Reflector.java: 127 clojure.lang.Reflector/invokeMatchingMethod
Reflector.java: 102 clojure.lang.Reflector/invokeInstanceMethod
register.cljc: 75 publicator.core.use_cases.user.register$process$cr23192_block_11__23219/invoke
impl.cljc: 60 cloroutine.impl$coroutine$fn__7323/invoke
Clojure 1.10.1, Java 12.0.2
@leonoel can you also fix this issue? I need any debugging tool. Cider debugger doesn't handle macros that uses &env argument.
I've been trying to debug coroutines with hashp and I've got an exception. Cloroutine doesn't handle locking form.
I use latest version of cloroutine.
I think cloroutine should have fake locking implementation.