Hi Jakob, 

It’s not entirely clear from the logs. The first worker constructor seems to 
complete successfully, but then "Error: Could not find or load main class 
MyApp” triggers a cleanup and at this point I’m not sure if the worker is still 
the first one or if we were trying to initialize another one. 

If the latter, and the worker init was somehow interrupted, it might explain 
the crash. But the main issue seems to be the error above. Are you maybe 
missing a Classpath (-cp) to the folder where your Class file is. 

Regards, 
Florin

> On Jul 13, 2026, at 1:19 AM, Jakob Lövhall via lists.fd.io 
> <[email protected]> wrote:
> 
> Hi Florin,
> 
> Is it clear from the log if that happens?
> Below is a shortened log with debug enabled for VCL and LDP.
> 
> Thanks
> 
> 
> 
> numactl --physcpubind=23 /home/<user>/scripts/start.sh
> + export LD_LIBRARY_PATH=/tmp/vpp_files/lib64/
> + LD_LIBRARY_PATH=/tmp/vpp_files/lib64/
> + export VCL_CONFIG=/tmp/vpp_files/vcl_startup.conf
> + VCL_CONFIG=/tmp/vpp_files/vcl_startup.conf
> + export VCL_DEBUG=2
> + VCL_DEBUG=2
> + export LDP_DEBUG=1
> + LDP_DEBUG=1
> + export LD_PRELOAD=/tmp/vpp_files/lib64/libvcl_ldpreload.so 
> <http://libvcl_ldpreload.so/>.26.10
> + LD_PRELOAD=/tmp/vpp_files/lib64/libvcl_ldpreload.so 
> <http://libvcl_ldpreload.so/>.26.10
> + exec java -cp ':/home/<user>/lib/*' MyApp
> ldp<1121497>: configured LDP debug level (1) from env var LDP_DEBUG!
> VCL<1121497>: configured VCL debug level (2) from VCL_DEBUG!
> ldp<1121497>: fd 3: calling libc_close
> allocated VCL heap = 0x7ff5973d63c0, size 268435456 (0x10000000)
> VCL<1121497>: configured rx_fifo_size 400000 (0x61a80)
> VCL<1121497>: configured tx_fifo_size 400000 (0x61a80)
> VCL<1121497>: configured segment_size 1000000000 (0x3b9aca00)
> VCL<1121497>: configured app_scope_global (1)
> VCL<1121497>: configured app-socket-api (/var/run/vpp/app_ns_sockets/default)
> VCL<1121497>: configured with mq with eventfd
> VCL<1121497>: configured event_queue_size 100000 (0x186a0)
> VCL<1121497>: completed parsing vppcom config!
> ldp<1121497>: fd 3: calling libc_close
> ldp<1121497>: calling libc_socket
> ldp<1121497>: fd 4: calling libc_connect(): addr 0x7ffca456a532, len 110
> ldp<1121497>: fd 7 vlsh -1, cmd 4
> vppcom_app_init_common:1569: vcl<1121497:0>: app_name 'java-ldp-1121497', 
> my_client_index 1 (0x1)
> ldp<1121497>: LDP initialization: done!
> ldp_constructor:2874: LDP<1121497>: LDP constructor: done!
> NOTE: Picked up JDK_JAVA_OPTIONS: 
> --add-opens=java.base/jdk.internal.misc=ALL-UNNAMED -Xms20G -Xmx20G 
> -XX:+UnlockExperimentalVMOptions -XX:+AlwaysPreTouch 
> -Djava.io.tmpdir=/home/<user>/var/services/run
> Picked up JAVA_TOOL_OPTIONS: -Xlog:gc,gc+init::tags,time,uptime,level 
> -XX:+PrintFlagsFinal -Xms256m -Xmx1024m -Djava.net.preferIPv4Stack=true 
> -Duser.timezone=UTC -Duser.language=en -Duser.country=SE
> ldp<1121497>: fd 9: calling libc_close
> ldp<1121497>: fd 9: calling libc_close
> ldp<1121497>: fd 9: calling libc_close
> ldp<1121497>: fd 11 vlsh -1, cmd 1
> ldp<1121497>: fd 9: calling libc_close
> ldp<1121497>: fd 11: calling libc_close
> [2026-07-09T21:53:42.613+0200][0.003s][info][gc,init] CardTable entry size: 
> 512
> [2026-07-09T21:53:42.613+0200][0.003s][info][gc     ] Using Serial
> [2026-07-09T21:53:47.308+0200][4.698s][info][gc,init] Version: 25.0.3+9-LTS 
> (release)
> [2026-07-09T21:53:47.308+0200][4.698s][info][gc,init] CPUs: 32 total, 1 
> available
> [2026-07-09T21:53:47.308+0200][4.698s][info][gc,init] Memory: 188G
> [2026-07-09T21:53:47.308+0200][4.698s][info][gc,init] Large Page Support: 
> Disabled
> [2026-07-09T21:53:47.308+0200][4.698s][info][gc,init] NUMA Support: Disabled
> [2026-07-09T21:53:47.308+0200][4.698s][info][gc,init] Compressed Oops: 
> Enabled (Zero based)
> [2026-07-09T21:53:47.308+0200][4.698s][info][gc,init] Heap Min Capacity: 20G
> [2026-07-09T21:53:47.308+0200][4.698s][info][gc,init] Heap Initial Capacity: 
> 20G
> [2026-07-09T21:53:47.308+0200][4.698s][info][gc,init] Heap Max Capacity: 20G
> [2026-07-09T21:53:47.308+0200][4.698s][info][gc,init] Pre-touch: Enabled
> ldp<1121497>: fd 9: calling libc_close
> [Global flags]
>     ccstr AOTCache                                 =                          
>                  {product} {default}
>      intx hashCode                                 = 5                        
>             {experimental} {default}
> ldp<1121497>: fd 0 vlsh -1, cmd 3
> ldp<1121497>: fd 1 vlsh -1, cmd 3
> ldp<1121497>: fd 2 vlsh -1, cmd 3
> Error: Could not find or load main class MyApp
> Caused by: java.lang.ClassNotFoundException: MyApp
> ldp_destructor:2894: LDP<1121497>: LDP destructor: done!
> #
> # A fatal error has been detected by the Java Runtime Environment:
> #
> #  SIGSEGV (0xb) at pc=0x00007ff5a758dbf6, pid=1121497, tid=1121505
> #
> # JRE version: OpenJDK Runtime Environment Temurin-25.0.3+9 (25.0.3+9) (build 
> 25.0.3+9-LTS)
> # Java VM: OpenJDK 64-Bit Server VM Temurin-25.0.3+9 (25.0.3+9-LTS, mixed 
> mode, sharing, tiered, compressed oops, compressed class ptrs, serial gc, 
> linux-amd64)
> # Problematic frame:
> # C  [libvppcom.so <http://libvppcom.so/>.26.10+0x19bf6]  
> vcl_worker_cleanup+0x56
> #
> # Core dump will be written. Default location: core.1121497 (may not exist)
> #
> # An error report file with more information is saved as:
> # /home/<user>/var/services/run/hs_err_pid1121497.log
> #
> # If you would like to submit a bug report, please visit:
> #   https://github.com/adoptium/adoptium-support/issues
> #
> 
> 
> 
> Från: [email protected] <mailto:[email protected]> <[email protected] 
> <mailto:[email protected]>> för Florin Coras via lists.fd.io 
> <http://lists.fd.io/> <[email protected] 
> <mailto:[email protected]>>
> Skickat: den 10 juli 2026 17:53
> Till: [email protected] <mailto:[email protected]> <[email protected] 
> <mailto:[email protected]>>
> Ämne: Re: [vpp-dev] VCL/LDP segfault in vppcom_app_exit when exit handler is 
> run by an unexpected thread
>  
> Du får inte ofta e-post från [email protected] 
> <mailto:[email protected]>. Läs om varför det här är viktigt 
> <https://aka.ms/LearnAboutSenderIdentification> 
> Hi Jakob, 
> 
> Would be interesting to understand why  __vcl_worker_index is -1. Ideally 
> when constructor creates the app, it should initialize the first worker. Does 
> that initialize appropriately?
> 
> Regards, 
> Florin
> 
>> On Jul 10, 2026, at 1:19 AM, Jakob Lövhall via lists.fd.io 
>> <[email protected]> wrote:
>> 
>> Hi,
>> 
>> I tried running VPP with its LD_PRELOAD library on a Java app.
>> What I found was that it will segfault if the JVM encounters some kind of 
>> issue, for example not finding the main class to run.
>> The segfault happens in vcl_worker_cleanup  coming from vppcom_app_exit, it 
>> looks like this is due to indexing issues when __vcl_worker_index is -1.
>> 
>> Here is a suggestion for patch to avoid it. Please consider it and add test 
>> coverage for it.
>> 
>> ```
>> diff --git a/src/vcl/vppcom.c b/src/vcl/vppcom.c
>> index 70d2674f9..873204945 100644
>> --- a/src/vcl/vppcom.c
>> +++ b/src/vcl/vppcom.c
>> @@ -1438,6 +1438,11 @@ vppcom_app_exit (void)
>>  {
>>    if (!pool_elts (vcm->workers))
>>      return;
>> +
>> +  /* exiting thread never used vcl */
>> +  if (vcl_get_worker_index () == ~0)
>> +    return;
>> +
>>    vcl_worker_cleanup (vcl_worker_get_current (), 1 /* notify vpp */ );
>>    vcl_set_worker_index (~0);
>>    vcl_elog_stop (vcm);
>> ```
>> 
>> 
>> 
>> This is what the segfault backtrace looks like in gdb
>> 
>> ```
>> Error: Could not find or load main class MainClass
>> Caused by: java.lang.ClassNotFoundException: MainClass
>> [Thread 0x7fff4ffff6c0 (LWP 1119246) exited]
>> [Thread 0x7fff641f96c0 (LWP 1119243) exited]
>> [Thread 0x7fff642fa6c0 (LWP 1119242) exited]
>> [Thread 0x7fff66b9d6c0 (LWP 1119240) exited]
>> 
>> Thread 11 "VM Thread" received signal SIGSEGV, Segmentation fault.
>> [Switching to Thread 0x7fff4fefe6c0 (LWP 1119247)]
>> vcl_worker_cleanup (wrk=wrk@entry=0x853fe7bd0140, 
>> notify_vpp=notify_vpp@entry=1 '\001') at vpp/src/vcl/vcl_private.c:123
>> warning: 123 vpp/src/vcl/vcl_private.c: No such file or directory
>> (gdb) bt
>> #0  vcl_worker_cleanup (wrk=wrk@entry=0x853fe7bd0140, 
>> notify_vpp=notify_vpp@entry=1 '\001') at vpp/src/vcl/vcl_private.c:123
>> #1  0x00007ffff7d6ffb6 in vppcom_app_exit () at vpp/src/vcl/vppcom.c:1441
>> #2  0x00007ffff7dec231 in __cxa_finalize () from /lib64/libc.so 
>> <http://libc.so/>.6
>> #3  0x00007ffff7d6e1b7 in __do_global_dtors_aux () from 
>> /tmp/vpp_files/lib64/libvppcom.so <http://libvppcom.so/>.26.10
>> #4  0x00007ffff7fc1a50 in ?? ()
>> #5  0x00007ffff7fc90e2 in _dl_call_fini (closure_map=0x7fff4fefd5a0, 
>> closure_map@entry=0x7ffff7fc1a50) at dl-call_fini.c:43
>> #6  0x00007ffff7fcd370 in _dl_fini () at dl-fini.c:120
>> #7  0x00007ffff7dec7b1 in __run_exit_handlers () from /lib64/libc.so 
>> <http://libc.so/>.6
>> #8  0x00007ffff7dec880 in exit () from /lib64/libc.so <http://libc.so/>.6
>> #9  0x00007fffa9880c79 in os::exit(int) () from 
>> /home/<user>/.sdkman/candidates/java/25.0.3-tem/lib/server/libjvm.so 
>> <http://libjvm.so/>
>> #10 0x00007fffa942104c in vm_direct_exit(int) () from 
>> /home/<user>/.sdkman/candidates/java/25.0.3-tem/lib/server/libjvm.so 
>> <http://libjvm.so/>
>> #11 0x00007fffa9c96a67 in VM_Operation::evaluate() () from 
>> /home/<user>/.sdkman/candidates/java/25.0.3-tem/lib/server/libjvm.so 
>> <http://libjvm.so/>
>> #12 0x00007fffa9c9a0a2 in VMThread::evaluate_operation(VM_Operation*) () 
>> from /home/<user>/.sdkman/candidates/java/25.0.3-tem/lib/server/libjvm.so 
>> <http://libjvm.so/>
>> #13 0x00007fffa9c9acd7 in VMThread::inner_execute(VM_Operation*) () from 
>> /home/<user>/.sdkman/candidates/java/25.0.3-tem/lib/server/libjvm.so 
>> <http://libjvm.so/>
>> #14 0x00007fffa9c9af97 in VMThread::run() () from 
>> /home/<user>/.sdkman/candidates/java/25.0.3-tem/lib/server/libjvm.so 
>> <http://libjvm.so/>
>> #15 0x00007fffa9bf842f in Thread::call_run() () from 
>> /home/<user>/.sdkman/candidates/java/25.0.3-tem/lib/server/libjvm.so 
>> <http://libjvm.so/>
>> #16 0x00007fffa9875b16 in thread_native_entry(Thread*) () from 
>> /home/<user>/.sdkman/candidates/java/25.0.3-tem/lib/server/libjvm.so 
>> <http://libjvm.so/>
>> #17 0x00007ffff7e3ea7f in start_thread () from /lib64/libc.so 
>> <http://libc.so/>.6
>> #18 0x00007ffff7eaf4fc in clone3 () from /lib64/libc.so <http://libc.so/>.6
>> ```
>> 
>> I created a minimal reproducer with Java. Which was just HelloWorld and then 
>> misspell the main class such that it cannot be found, but I see that I am 
>> not allowed to attach tar.gz files. The reproducer stays with me for now. 
>> Hopefully you can reproduce it on your own.
>> 
>> Thanks,
>> Jakob
>> 
> 
> 
> 

-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#27107): https://lists.fd.io/g/vpp-dev/message/27107
Mute This Topic: https://lists.fd.io/mt/120203465/21656
Group Owner: [email protected]
Unsubscribe: https://lists.fd.io/g/vpp-dev/leave/14379924/21656/631435203/xyzzy 
[[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to