Comments (9)
If you apply the link mentioned here : #1378 (comment), does that fix the issue?
Whatever the issue is, I don't think the stacktrace is being "erased" as is suspected.
from janet.
I suspect janet shut down before stacktrace was printed?
Should I mechanically replace all invocations of
exit
with_exit
and compile janet?
Yeah, that is what I'm suggesting. After _exit called, nothing should be returning, as that is the root of all of this strange cleanup behavior
from janet.
The description of the problem doesn't make sense to me, I would need some sample code to debug. It sounds like there is some multithreading involved.
from janet.
Yes, there are a lot of threads that stall the shutdown process.... Expect at least 7 threads.
file/read
is called in a separate thread, too.
from janet.
I think file/read
didn't have time to return nil if the shutdown was fast.
If there are many threads that stall the shutdown, then file/read
has enough time to return nil which causes json/decode
to throw an error because json/decode
doesn't like nil.
Because janet is shutting down, it doesn't have stacktrace for json/decode
.
It is basically a race condition.
from janet.
I suspect janet shut down before stacktrace was printed?
Should I mechanically replace all invocations of exit
with _exit
and compile janet?
from janet.
Is it possible for file/read
to return nil during shut down?
from janet.
I was able to reproduce this issue partially.
test.janet
(import spork/json)
(ev/spawn-thread
(with [proc (os/spawn ["sleep" "100000000000"] :p {:out :pipe :err :pipe})]
(os/proc-wait proc)))
(ev/spawn-thread
(forever
(json/decode (file/read stdin :line))))
(forever
(ev/sleep 1))
Execute
$ sleep 1000 | janet test.janet
If you kill sleep
, you will get an error message like
$ sleep 10000 | janet test.janet
error: bad slot #0, expected string, symbol, keyword or buffer, got nil
in json/decode
in _spawn-thread [test.janet] on line 9, column 5
So, I should check whether (file/read stdin :line)
returns nil anyway.
My suspicion is that if you kill sleep and then test.janet very fast in sequence, you can kill the script before stacktrace is printed. That's probably why I could sometimes see the stacktrace and could not most of the time.
What do you think?
from janet.
I think I'm just closing this issue.... for now...
from janet.
Related Issues (20)
- Proposal: Terse Chained Indices HOT 19
- Reimplement `slurp` with `os/open`. HOT 28
- A way to read standard input in the background without `file/read` in a thread. HOT 4
- `each` macro improper behavior? HOT 8
- `if-let` breaks tail call optimization. HOT 6
- false branch of `if-let` doesn't report the correct call stack information. HOT 4
- `ev/select` should not resume a dead task. HOT 4
- `try` and `defer` break tail call optimization. HOT 4
- `(= @"update" @"update")` is `false`. HOT 3
- `ev/select` still revives fibers.... HOT 3
- option to unbundle docstrings and potential consequences HOT 8
- splicing into structs/tables HOT 2
- Disasm/asm doesn't round-trip for function with unused argument HOT 1
- eventloop/networking gets stuck on musl HOT 11
- Consider making `module/paths` a dynamic variable HOT 6
- Can it run on iOS? Thank you. HOT 3
- `os/strftime` doesn't respect environment variables. HOT 3
- Re-integrate jpm into janet HOT 45
- recent change kinda breaks lexical scope with multiple modules HOT 2
- How to switch off spork/sh/copy message? HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from janet.