totovr / SimpleOpenNI

SimpleOpenNI library for Processing 3.5.2, 3.4, 3.3.7, 3.3.6 on MacOS for V1 and V2
https://totovr.github.io/SimpleOpenNI/
MIT License
158 stars 47 forks source link

v2.2 crashes on mac mini every once a while (JRE fatal error; EXC_BAD_ACCESS) #17

Open KiwiChicken opened 5 years ago

KiwiChicken commented 5 years ago

Issue Summary

Thanks for this awesome tool and your time guys. This is the first time I try to post an issue so please point out any mistake I made in the post. I have been trying to maintain a project called kinecticspace which can date back to 2011. It is Processing 2.2.1 based, and I have been running it on a mac mini, with SimpleOpenNI 2.2 installed as per the instructions. The program crashes every once a while (between a day and a week) on "isTrackingSkeleton()", with a series of tracking on one of the users. The code snippet around the function call looks like shown in the Executed Command session. It could be a defect in the code, but I could not see why, and wonder if this is a know issue for OpenNI? When crashes, it shows: A fatal error has been detected by the Java Runtime Environment:

SIGSEGV (0xb) at pc=0x0000000112630b4c, pid=15336, tid=54311

JRE version: Java(TM) SE Runtime Environment (7.0_55-b13) (build 1.7.0_55-b13) Java VM: Java HotSpot(TM) 64-Bit Server VM (24.55-b03 mixed mode bsd-amd64 compressed oops) Problematic frame: C [libSimpleOpenNI.jnilib+0x12b4c] _ZN7sOpenNI14ContextWrapper18isTrackingSkeletonEi+0x8c

OR, more precisely, there are 2 ways to crash at thread 22, isTracking skeleton(), only slightly different on the crashing lines, while other threads are fine: shared crashing info header: Process: java [87046] Path: /Applications/Processing.app/Contents/PlugIns/jdk1.7.0_55.jdk/Contents/Home/jre/bin/java Identifier: net.java.openjdk.cmd Version: 1.0 (1.0) Code Type: X86-64 (Native) Parent Process: Processing [245] Responsible: Processing [245] User ID: 509

Date/Time: 2019-04-06 10:02:37.815 -0400 OS Version: Mac OS X 10.10.3 (14D136) Report Version: 11 Anonymous UUID: CF643EE6-A166-D2B1-4C0F-9F333919F2D0

Sleep/Wake UUID: 673803D7-7A53-409D-B2C9-D465C66607DB

Time Awake Since Boot: 1800000 seconds Time Since Wake: 770000 seconds

Crashed Thread: 22 Java: AWT-EventQueue-0

Exception Type: EXC_BAD_ACCESS (SIGABRT) Exception Codes: KERN_INVALID_ADDRESS at 0x0000000000000023

case 1: at 140 (stack bt up 6) Thread 22 Crashed:: Java: AWT-EventQueue-0 0 libsystem_kernel.dylib 0x00007fff8af8e286 __pthread_kill + 10 1 libsystem_c.dylib 0x00007fff86b18b53 abort + 129 2 libjvm.dylib 0x000000010a043b1b os::abort(bool) + 25 3 libjvm.dylib 0x000000010a14e1f0 VMError::report_and_die() + 2316 4 libjvm.dylib 0x000000010a0454b5 JVM_handle_bsd_signal + 1083 5 libsystem_platform.dylib 0x00007fff8fdeaf1a _sigtramp + 26 6 libSimpleOpenNI.jnilib 0x000000011b0ccb4c sOpenNI::ContextWrapper::isTrackingSkeleton(int) + 140 7 libSimpleOpenNI.jnilib 0x000000011b0c1b3f Java_SimpleOpenNI_SimpleOpenNIJNI_ContextWrapper_1isTrackingSkeleton + 15 8 ??? 0x000000010afa5ace 0 + 4479146702 9 ??? 0x000000010af0a1e8 0 + 4478509544 10 ??? 0x00000000ef6ab660 0 + 4016748128

case 2: at 174 Thread 22 Crashed:: Java: AWT-EventQueue-0 0 libsystem_kernel.dylib 0x00007fff8af8e286 __pthread_kill + 10 1 libsystem_c.dylib 0x00007fff86b18b53 abort + 129 2 libjvm.dylib 0x000000010f609b1b os::abort(bool) + 25 3 libjvm.dylib 0x000000010f7141f0 VMError::report_and_die() + 2316 4 libjvm.dylib 0x000000010f60b4b5 JVM_handle_bsd_signal + 1083 5 libsystem_platform.dylib 0x00007fff8fdeaf1a _sigtramp + 26 6 libSimpleOpenNI.jnilib 0x00000001218e9b6e sOpenNI::ContextWrapper::isTrackingSkeleton(int) + 174 7 libSimpleOpenNI.jnilib 0x00000001218deb3f Java_SimpleOpenNI_SimpleOpenNIJNI_ContextWrapper_1isTrackingSkeleton + 15 8 ??? 0x0000000110218559 0 + 4565599577 9 ??? 0x00000001104cb410 0 + 4568429584

Executed Command (if any)

FYI: per my debugging data, the input for isTrackingSkeleton() is always between 1 and 6

int[] userList = context.getUsers(); if (userList == null) { println("err: null user list."); exit(); }

for (int i = 0; i<userList.length; i++)
{
    if ( (context.isTrackingSkeleton(userList[i])) && (person < 2) )
    {
        //println("Tracking user: " + userList[i]);
        evaluateSkeleton(userList[i]);
        foundSkeleton = true;
        person++;
    }
}

... (more code dealing with the user)

Type of Issue