pjsua2 crash in endpoint.libCreate Android

DA
Dirar Abu-Saymeh
Fri, May 15, 2020 5:42 AM

After further debugging it seems LibCreate is crashing in the function “attach_jvm”. It seems the variable pj_jni_jvm is not defined.

In googling possible reasons, the only solution that was posted to make sure the config_site.h is properly defined for android which in my case it is:

#define PJ_CONFIG_ANDROID 1
#include <pj/config_site_sample.h>

Does anybody have any suggestions on what could be causing this?

Regards

Hi,

I have been trying to integrate pjsip into my Xamarin.Forms app. I have successfully gotten the iOS version to work, but have been facing a crash on the Android version and have not found a solution for it. I tried all pjsip versions from 2.6 to 2.10 with the same issue. I also went back to the sample pjsua2xamarin application and I get the same crash.

Crash log:
[Mono] Found as 'CSharp_pjsua2xamarinfpjsua2_Endpoint_libCreate___'.
[libc] Fatal signal 11 (SIGSEGV), code 1, fault addr 0x0 in tid 30101

What I have done:

  1. Followed instructions in ticket 2086.

  2. Followed pjsip instructions on how to build for Android https://trac.pjsip.org/repos/wiki/Getting-Started/Android https://trac.pjsip.org/repos/wiki/Getting-Started/Android <https://trac.pjsip.org/repos/wiki/Getting-Started/Android https://trac.pjsip.org/repos/wiki/Getting-Started/Android>

  3. Added the following android permissions in Manifest just to be comprehensive since ticket 2086 mentions that crash in the initialization phase is most probably related to permissions:
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.USE_SIP" />
    <uses-permission android:name="android.permission.CAMERA" />

  4. I’m trying to run in an emulator and android sdk version 22, so I don’t have to worry about requesting permissions

  5. I have also tried different ndk versions from r13b to r20 and tried targeting various android sdk levels

  6. I used the following configure parameters: APP_PLATFORM=android-18 TARGET_ABI=x86 ./configure-android --use-ndk-cflags --disable-video

I’m not sure what I can do to debug this issue. Has nay body ran into this issues? Any suggestions on what I can do/try next?

After further debugging it seems LibCreate is crashing in the function “attach_jvm”. It seems the variable pj_jni_jvm is not defined. In googling possible reasons, the only solution that was posted to make sure the config_site.h is properly defined for android which in my case it is: #define PJ_CONFIG_ANDROID 1 #include <pj/config_site_sample.h> Does anybody have any suggestions on what could be causing this? Regards -------- Hi, I have been trying to integrate pjsip into my Xamarin.Forms app. I have successfully gotten the iOS version to work, but have been facing a crash on the Android version and have not found a solution for it. I tried all pjsip versions from 2.6 to 2.10 with the same issue. I also went back to the sample pjsua2xamarin application and I get the same crash. Crash log: [Mono] Found as 'CSharp_pjsua2xamarinfpjsua2_Endpoint_libCreate___'. [libc] Fatal signal 11 (SIGSEGV), code 1, fault addr 0x0 in tid 30101 What I have done: 1. Followed instructions in ticket 2086. 2. Followed pjsip instructions on how to build for Android https://trac.pjsip.org/repos/wiki/Getting-Started/Android <https://trac.pjsip.org/repos/wiki/Getting-Started/Android> <https://trac.pjsip.org/repos/wiki/Getting-Started/Android <https://trac.pjsip.org/repos/wiki/Getting-Started/Android>> 3. Added the following android permissions in Manifest just to be comprehensive since ticket 2086 mentions that crash in the initialization phase is most probably related to permissions: <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.VIBRATE" /> <uses-permission android:name="android.permission.USE_SIP" /> <uses-permission android:name="android.permission.CAMERA" /> 4. I’m trying to run in an emulator and android sdk version 22, so I don’t have to worry about requesting permissions 5. I have also tried different ndk versions from r13b to r20 and tried targeting various android sdk levels 6. I used the following configure parameters: APP_PLATFORM=android-18 TARGET_ABI=x86 ./configure-android --use-ndk-cflags --disable-video I’m not sure what I can do to debug this issue. Has nay body ran into this issues? Any suggestions on what I can do/try next?
DA
Dirar Abu-Saymeh
Sun, May 17, 2020 6:05 AM

I have been able to progress a little bit more. It seems that JNI_OnLoad is not called for Xamarin.Android applications (probably because Xamarin does not load the libraries using the standard System.loadlibrary methods). This leaves the  pj_jni_jvm (JavaVM pointer) as undefined. For Endpoint.LibCreate, JavaVM pointer was used for creating GUIDs. So I went ahead and used the code from guid_simple.c to create GUIDs. So I was able to get around Endpoint.LibCreate crashing and have the application register with the SIP server.

However the JavaVM pointer is used in a couple of other locations, the most important place being android_jni_dev.c. The program would crash when calling Endpoint.audDevManager().setCaptureDev(). If I modify the attach_jvm function in android_jni_dev.c and add the following at the beginning:
if (!pj_jni_jvm) {
PJ_LOG(1,(THIS_FILE, "ERROR: JNI JavaVM was not initialized."));
return PJ_FALSE;
}

I don't have the crash anymore but there wouldn’t be any audio during calls obviously since there is no audio devices.

I tried to use JNI_GetCreatedJavaVMs, to get the JavaVM pointer since JNI_OnLoad is not called. However, NDK does not export this method for some reason, so I get undefined reference when linking the code.

Does anybody have any clues on how I can get around this? I’m not sure if anybody has successfully used pjsip with Xamarin.Android. This seems to be the last problem I need to solve, since the application runs through ok, but no audio.

Is there a way to use android audio device without using the JavaVM pointer?

Thanks in advance for any help.

On May 15, 2020, at 1:42 AM, Dirar Abu-Saymeh dirar.abusaymeh@vectrafon.com wrote:

After further debugging it seems LibCreate is crashing in the function “attach_jvm”. It seems the variable pj_jni_jvm is not defined.

In googling possible reasons, the only solution that was posted to make sure the config_site.h is properly defined for android which in my case it is:

#define PJ_CONFIG_ANDROID 1
#include <pj/config_site_sample.h>

Does anybody have any suggestions on what could be causing this?

Regards

Hi,

I have been trying to integrate pjsip into my Xamarin.Forms app. I have successfully gotten the iOS version to work, but have been facing a crash on the Android version and have not found a solution for it. I tried all pjsip versions from 2.6 to 2.10 with the same issue. I also went back to the sample pjsua2xamarin application and I get the same crash.

Crash log:
[Mono] Found as 'CSharp_pjsua2xamarinfpjsua2_Endpoint_libCreate___'.
[libc] Fatal signal 11 (SIGSEGV), code 1, fault addr 0x0 in tid 30101

What I have done:

  1. Followed instructions in ticket 2086.

  2. Followed pjsip instructions on how to build for Android https://trac.pjsip.org/repos/wiki/Getting-Started/Android https://trac.pjsip.org/repos/wiki/Getting-Started/Android <https://trac.pjsip.org/repos/wiki/Getting-Started/Android https://trac.pjsip.org/repos/wiki/Getting-Started/Android>

  3. Added the following android permissions in Manifest just to be comprehensive since ticket 2086 mentions that crash in the initialization phase is most probably related to permissions:
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.USE_SIP" />
    <uses-permission android:name="android.permission.CAMERA" />

  4. I’m trying to run in an emulator and android sdk version 22, so I don’t have to worry about requesting permissions

  5. I have also tried different ndk versions from r13b to r20 and tried targeting various android sdk levels

  6. I used the following configure parameters: APP_PLATFORM=android-18 TARGET_ABI=x86 ./configure-android --use-ndk-cflags --disable-video

I’m not sure what I can do to debug this issue. Has nay body ran into this issues? Any suggestions on what I can do/try next?

I have been able to progress a little bit more. It seems that JNI_OnLoad is not called for Xamarin.Android applications (probably because Xamarin does not load the libraries using the standard System.loadlibrary methods). This leaves the pj_jni_jvm (JavaVM pointer) as undefined. For Endpoint.LibCreate, JavaVM pointer was used for creating GUIDs. So I went ahead and used the code from guid_simple.c to create GUIDs. So I was able to get around Endpoint.LibCreate crashing and have the application register with the SIP server. However the JavaVM pointer is used in a couple of other locations, the most important place being android_jni_dev.c. The program would crash when calling Endpoint.audDevManager().setCaptureDev(). If I modify the attach_jvm function in android_jni_dev.c and add the following at the beginning: if (!pj_jni_jvm) { PJ_LOG(1,(THIS_FILE, "ERROR: JNI JavaVM was not initialized.")); return PJ_FALSE; } I don't have the crash anymore but there wouldn’t be any audio during calls obviously since there is no audio devices. I tried to use JNI_GetCreatedJavaVMs, to get the JavaVM pointer since JNI_OnLoad is not called. However, NDK does not export this method for some reason, so I get undefined reference when linking the code. Does anybody have any clues on how I can get around this? I’m not sure if anybody has successfully used pjsip with Xamarin.Android. This seems to be the last problem I need to solve, since the application runs through ok, but no audio. Is there a way to use android audio device without using the JavaVM pointer? Thanks in advance for any help. > On May 15, 2020, at 1:42 AM, Dirar Abu-Saymeh <dirar.abusaymeh@vectrafon.com> wrote: > > After further debugging it seems LibCreate is crashing in the function “attach_jvm”. It seems the variable pj_jni_jvm is not defined. > > In googling possible reasons, the only solution that was posted to make sure the config_site.h is properly defined for android which in my case it is: > > #define PJ_CONFIG_ANDROID 1 > #include <pj/config_site_sample.h> > > Does anybody have any suggestions on what could be causing this? > > Regards > -------- > Hi, > > I have been trying to integrate pjsip into my Xamarin.Forms app. I have successfully gotten the iOS version to work, but have been facing a crash on the Android version and have not found a solution for it. I tried all pjsip versions from 2.6 to 2.10 with the same issue. I also went back to the sample pjsua2xamarin application and I get the same crash. > > Crash log: > [Mono] Found as 'CSharp_pjsua2xamarinfpjsua2_Endpoint_libCreate___'. > [libc] Fatal signal 11 (SIGSEGV), code 1, fault addr 0x0 in tid 30101 > > What I have done: > 1. Followed instructions in ticket 2086. > 2. Followed pjsip instructions on how to build for Android https://trac.pjsip.org/repos/wiki/Getting-Started/Android <https://trac.pjsip.org/repos/wiki/Getting-Started/Android> <https://trac.pjsip.org/repos/wiki/Getting-Started/Android <https://trac.pjsip.org/repos/wiki/Getting-Started/Android>> > 3. Added the following android permissions in Manifest just to be comprehensive since ticket 2086 mentions that crash in the initialization phase is most probably related to permissions: > <uses-permission android:name="android.permission.INTERNET" /> > <uses-permission android:name="android.permission.RECORD_AUDIO" /> > <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> > <uses-permission android:name="android.permission.READ_PHONE_STATE" /> > <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> > <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> > <uses-permission android:name="android.permission.WAKE_LOCK" /> > <uses-permission android:name="android.permission.VIBRATE" /> > <uses-permission android:name="android.permission.USE_SIP" /> > <uses-permission android:name="android.permission.CAMERA" /> > 4. I’m trying to run in an emulator and android sdk version 22, so I don’t have to worry about requesting permissions > > 5. I have also tried different ndk versions from r13b to r20 and tried targeting various android sdk levels > > 6. I used the following configure parameters: APP_PLATFORM=android-18 TARGET_ABI=x86 ./configure-android --use-ndk-cflags --disable-video > > I’m not sure what I can do to debug this issue. Has nay body ran into this issues? Any suggestions on what I can do/try next? >