# Julia session crashes when calling \`JavaCall.init()\` from a julia session managed by VSCode

**URL:** <https://discourse.julialang.org/t/julia-session-crashes-when-calling-javacall-init-from-a-julia-session-managed-by-vscode/92555>\
**Category:** VS Code\
**Tags:** vscode, java\
**Created:** [January 5, 2023, 2:07pm UTC](https://discourse.julialang.org/t/julia-session-crashes-when-calling-javacall-init-from-a-julia-session-managed-by-vscode/92555 "2023-01-05T14:07:21Z")\
**Posts on this page:** 18\
**Page:** 1

<div class="post-metadata">

**Author:** ![tencnivel](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tencnivel/32/8662_2.png) [@tencnivel](https://discourse.julialang.org/u/tencnivel)\
**Post date:** [January 5, 2023, 2:07pm UTC](https://discourse.julialang.org/t/julia-session-crashes-when-calling-javacall-init-from-a-julia-session-managed-by-vscode/92555/1 "2023-01-05T14:07:21Z")

</div>

I cant make `JavaCall.init()` work from a julia session started by the VSCode plugin.  
Same as for this post [RCall vscode REPL crash](https://discourse.julialang.org/t/rcall-vscode-repl-crash/46128), it works fine if I do it from a terminal.

I have tried on two different machines, with 1.6, 1.7, and 1.8

Here is how to reproduce the problem:

- Create a new project
- Add dependency to JavaCall
- Start a julia session from VSCode
- Execute the following:

```julia
using JavaCall
JavaCall.init()

```

The julia extension version is v1.38.2  
VSCode version is 1.74.2

---

<div class="post-metadata">

**Author:** ![tencnivel](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tencnivel/32/8662_2.png) [@tencnivel](https://discourse.julialang.org/u/tencnivel)\
**Post date:** [January 5, 2023, 2:15pm UTC](https://discourse.julialang.org/t/julia-session-crashes-when-calling-javacall-init-from-a-julia-session-managed-by-vscode/92555/2 "2023-01-05T14:15:48Z")

</div>

If I activate the tmux persistent session, the only additional information that I get is the following:  
`Pane is dead (signal 11, Thu Jan 5 15:13:44 2023)`  
Just tmux telling the pane in which the julia session runs is dead

---

<div class="post-metadata">

**Author:** ![mkitti](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mkitti/32/12459_2.png) [@mkitti](https://discourse.julialang.org/u/mkitti)\
**Post date:** [January 7, 2023, 3:51am UTC](https://discourse.julialang.org/t/julia-session-crashes-when-calling-javacall-init-from-a-julia-session-managed-by-vscode/92555/3 "2023-01-07T03:51:58Z")

</div>

What operating system are you using?

---

<div class="post-metadata">

**Author:** ![tencnivel](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tencnivel/32/8662_2.png) [@tencnivel](https://discourse.julialang.org/u/tencnivel)\
**Post date:** [January 7, 2023, 6:55pm UTC](https://discourse.julialang.org/t/julia-session-crashes-when-calling-javacall-init-from-a-julia-session-managed-by-vscode/92555/4 "2023-01-07T18:55:31Z")

</div>

I’m using linux Fedora 37

---

<div class="post-metadata">

**Author:** ![mkitti](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mkitti/32/12459_2.png) [@mkitti](https://discourse.julialang.org/u/mkitti)\
**Post date:** [January 7, 2023, 11:02pm UTC](https://discourse.julialang.org/t/julia-session-crashes-when-calling-javacall-init-from-a-julia-session-managed-by-vscode/92555/5 "2023-01-07T23:02:34Z")

</div>

Which JVM are you using?

---

<div class="post-metadata">

**Author:** ![tencnivel](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tencnivel/32/8662_2.png) [@tencnivel](https://discourse.julialang.org/u/tencnivel)\
**Post date:** [January 8, 2023, 12:34am UTC](https://discourse.julialang.org/t/julia-session-crashes-when-calling-javacall-init-from-a-julia-session-managed-by-vscode/92555/6 "2023-01-08T00:34:59Z")

</div>

```julia
$ java --version
openjdk 17.0.5 2022-10-18
OpenJDK Runtime Environment (Red_Hat-17.0.5.0.8-1.fc37) (build 17.0.5+8)
OpenJDK 64-Bit Server VM (Red_Hat-17.0.5.0.8-1.fc37) (build 17.0.5+8, mixed mode, sharing)

```

I will try with an Oracle JRE and tell how it goes

---

<div class="post-metadata">

**Author:** ![tencnivel](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tencnivel/32/8662_2.png) [@tencnivel](https://discourse.julialang.org/u/tencnivel)\
**Post date:** [January 8, 2023, 1:08am UTC](https://discourse.julialang.org/t/julia-session-crashes-when-calling-javacall-init-from-a-julia-session-managed-by-vscode/92555/7 "2023-01-08T01:08:00Z")

</div>

same when using the oracle jvm

---

<div class="post-metadata">

**Author:** ![mkitti](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mkitti/32/12459_2.png) [@mkitti](https://discourse.julialang.org/u/mkitti)\
**Post date:** [January 8, 2023, 11:57pm UTC](https://discourse.julialang.org/t/julia-session-crashes-when-calling-javacall-init-from-a-julia-session-managed-by-vscode/92555/8 "2023-01-08T23:57:37Z")

</div>

I’m not sure if I have tested JavaCall.jl with a JVM beyond Java 11, so you might try downgrading if possible.

My suspicion is that we are running into issues with signals and signal chaining. Some of it could actually be ignored if we could catch it before it becomes fatal.

My recommendation would be to try some kind of message passing and IPC instead. For example, ZMQ and Apache Arrow.

---

<div class="post-metadata">

**Author:** ![mkitti](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mkitti/32/12459_2.png) [@mkitti](https://discourse.julialang.org/u/mkitti)\
**Post date:** [January 9, 2023, 12:28am UTC](https://discourse.julialang.org/t/julia-session-crashes-when-calling-javacall-init-from-a-julia-session-managed-by-vscode/92555/9 "2023-01-09T00:28:08Z")

</div>

I’m running an Ubuntu 22.04 box.

To obtain a environment we both can run, I did the following:

1. Download mamba-forge from here:  
[GitHub - conda-forge/miniforge: A conda-forge distribution.](https://github.com/conda-forge/miniforge)

2. Create an environment using mamba with the following incantation.

```julia
mamba create -n julia185_java17 -c conda-forge julia=1.8.5 openjdk=17
mamba activate julia185_java17

```

1. Invoke julia with `JULIA_COPY_STACKS=1`:

```julia
$ JULIA_COPY_STACKS=1 julia

```

1. Run the following in the Julia REPL.

```julia
julia> using Pkg

julia> pkg"add JavaCall"
   Resolving package versions...
  No Changes to `~/mambaforge/envs/julia185_java17/share/julia/environments/julia185_java17/Project.toml`
  No Changes to `~/mambaforge/envs/julia185_java17/share/julia/environments/julia185_java17/Manifest.toml`

julia> using JavaCall

julia> JavaCall.init()

julia> jls = @jimport java.lang.System
JavaObject{Symbol("java.lang.System")}

julia> jcall(jls, "getProperty", JString, (JString,), "java.version")
"17.0.3-internal"

julia> out = jfield(jls, "out", @jimport java.io.PrintStream)
JavaObject{Symbol("java.io.PrintStream")}(JavaCall.JavaLocalRef(Ptr{Nothing} @0x0000559d3590e310))

julia> jcall(out, "println", Nothing, (JString,), "Hello World from Julia 1.8.5 and Java 17")
Hello World from Julia 1.8.5 and Java 17

```

---

<div class="post-metadata">

**Author:** ![tencnivel](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tencnivel/32/8662_2.png) [@tencnivel](https://discourse.julialang.org/u/tencnivel)\
**Post date:** [January 24, 2023, 11:12am UTC](https://discourse.julialang.org/t/julia-session-crashes-when-calling-javacall-init-from-a-julia-session-managed-by-vscode/92555/10 "2023-01-24T11:12:05Z")

</div>

Hi, sorry for my late reply.

I had issues with mambaforge, so I wasnt able to do what you wanted me to.  
But I have tried on 3 different linux machines and on one Windows machine.  
It fails for all linux machines but not for the windows machine.

On linux the problem happens only when using vscode.

---

<div class="post-metadata">

**Author:** ![mkitti](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mkitti/32/12459_2.png) [@mkitti](https://discourse.julialang.org/u/mkitti)\
**Post date:** [January 24, 2023, 4:03pm UTC](https://discourse.julialang.org/t/julia-session-crashes-when-calling-javacall-init-from-a-julia-session-managed-by-vscode/92555/11 "2023-01-24T16:03:34Z")

</div>

Could you elaborate?

1. What was the problem with mamba-forge?
2. What version of Java are you trying on each machine?
3. Did you try anything other than Java 17?
4. Where did you download Java from? Have you treid Azul Zulu JDK?
5. If you start a terminal within VSCode, start julia from the terminal, and then use JavaCall do you still encounter the problem?

---

<div class="post-metadata">

**Author:** ![tencnivel](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tencnivel/32/8662_2.png) [@tencnivel](https://discourse.julialang.org/u/tencnivel)\
**Post date:** [January 24, 2023, 4:45pm UTC](https://discourse.julialang.org/t/julia-session-crashes-when-calling-javacall-init-from-a-julia-session-managed-by-vscode/92555/12 "2023-01-24T16:45:02Z")

</div>

Regarding your last question, I thought the tittle of the discussion and my first message didnt lead to confusion, but let me say it again:  
We only have the problem with a julia session started by VSCode julia extension (Open Palettte \> Julia:Start REPL)

We tried with openJDK JREs and oracle JREs, on Ubuntu, Debian, Fedora.  
Last try was with openjdk version “17.0.5” 2022-10-18 on Fedora 37

The issue with mamba-forge is that on my local environment it messed up my env, I uninstalled it and with remote containerized dev, Im not sure how to achieve that.

---

<div class="post-metadata">

**Author:** ![mkitti](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mkitti/32/12459_2.png) [@mkitti](https://discourse.julialang.org/u/mkitti)\
**Post date:** [January 24, 2023, 5:30pm UTC](https://discourse.julialang.org/t/julia-session-crashes-when-calling-javacall-init-from-a-julia-session-managed-by-vscode/92555/13 "2023-01-24T17:30:08Z")

</div>

Did you set the environment variable `JULIA_COPY_STACKS=1` before starting VSCode?

I still cannot reproduce this on Ubuntu 22.04. I just tried again in from the Julia REPL in VSCode without an issue.

```julia
openjdk version "11.0.17" 2022-10-18
OpenJDK Runtime Environment (build 11.0.17+8-post-Ubuntu-1ubuntu222.04)
OpenJDK 64-Bit Server VM (build 11.0.17+8-post-Ubuntu-1ubuntu222.04, mixed mode, sharing)

```

 ![image](https://global.discourse-cdn.com/julialang/original/3X/c/6/c6dbda605bbeb00d1cf9ed8be1e0889a20988ead.png)

---

<div class="post-metadata">

**Author:** ![tencnivel](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tencnivel/32/8662_2.png) [@tencnivel](https://discourse.julialang.org/u/tencnivel)\
**Post date:** [January 24, 2023, 5:59pm UTC](https://discourse.julialang.org/t/julia-session-crashes-when-calling-javacall-init-from-a-julia-session-managed-by-vscode/92555/14 "2023-01-24T17:59:21Z")

</div>

that is really strange, that’s what I have

 ![image](https://global.discourse-cdn.com/julialang/original/3X/4/0/40ba5caa573b2c7b4a21b62094186adff55392b2.png)

---

<div class="post-metadata">

**Author:** ![tencnivel](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tencnivel/32/8662_2.png) [@tencnivel](https://discourse.julialang.org/u/tencnivel)\
**Post date:** [January 24, 2023, 6:28pm UTC](https://discourse.julialang.org/t/julia-session-crashes-when-calling-javacall-init-from-a-julia-session-managed-by-vscode/92555/15 "2023-01-24T18:28:45Z")

</div>

I set `JULIA_COPY_STACKS` in my startup.jl

let me try setting it as a user environment variable

---

<div class="post-metadata">

**Author:** ![mkitti](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mkitti/32/12459_2.png) [@mkitti](https://discourse.julialang.org/u/mkitti)\
**Post date:** [January 24, 2023, 8:00pm UTC](https://discourse.julialang.org/t/julia-session-crashes-when-calling-javacall-init-from-a-julia-session-managed-by-vscode/92555/16 "2023-01-24T20:00:29Z")

</div>

No, that is not sufficient to set in startup.jl. You must set the environment variable before the Julia process starts.

---

<div class="post-metadata">

**Author:** ![tencnivel](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tencnivel/32/8662_2.png) [@tencnivel](https://discourse.julialang.org/u/tencnivel)\
**Post date:** [January 26, 2023, 4:55pm UTC](https://discourse.julialang.org/t/julia-session-crashes-when-calling-javacall-init-from-a-julia-session-managed-by-vscode/92555/17 "2023-01-26T16:55:09Z")

</div>

that was the problem, `JULIA_COPY_STACKS` cannot be set in startup.jl if the julia session is started by vscode,

Thanks!

---

<div class="post-metadata">

**Author:** ![mkitti](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mkitti/32/12459_2.png) [@mkitti](https://discourse.julialang.org/u/mkitti)\
**Post date:** [January 26, 2023, 8:15pm UTC](https://discourse.julialang.org/t/julia-session-crashes-when-calling-javacall-init-from-a-julia-session-managed-by-vscode/92555/18 "2023-01-26T20:15:19Z")

</div>

I’m glad we eventually got this solved. One hint for me was that you were having more issues on Linux than Windows.

To elaborate, the issue is due to interference between task context switching and intraprocess signalling. Java and Julia both use signals, such as SIGSEGV and SIGTERM, and install signal handlers. If the wrong signal handler catches the signal or the signal handler does not exist in the current stack as expected, a segmentation fault (signal 11) can occur. The situation continues to be quite fragile.

You may also want to consider running Java and Julia in different processes and communicating using an interprocess communication (IPC) protocol such as ZeroMQ and shared memory (Apache Arrow).
