Crash when using Bluetooth

Kate Alhola kate.alhola at gmail.com
Thu Nov 8 11:39:35 UTC 2012


Hi, I have been doing little bit research about this issue. I just under
investigation one simple function QBluetoothLocaldevice::name().
The function crashes if vm->GetEnv() is done in JINI_OnLoad() . When I
moved that code inside of QBluetoothLocaldevice constructor
code works. I have not yet made any patches, this was just result of simple
experiment.

I tried in some other code do same allocations in JINI_OnLoad and got
errors that VM was allocated for wrong thread.
It looks that JINI_OnLoad is too early phase to allocate

Before going forward with fix, I just like hear opinion am I at right
track. The bthost is my experimental class
just to test code. initJini is called from constructor. Name() duplicates
function from QBluetoothLocalDevice

Then other related question, if I do patched libQtConnectivity, what is
best way to use it ? Necessitas always
installs it's own and it can't be copied over without rooting the device.


Kate

void BtHost::initJini()
{
    void* venv = NULL;

    qDebug() <<  "BtHost:JNI_OnLoad()";
    if (m_jvm->GetEnv(&venv, JNI_VERSION_1_4) != JNI_OK)
    {
       qDebug() << "Qt:GetEnv failed";
       return;
    }
    jclass qtApplicationC;
    env = reinterpret_cast<JNIEnv*>(venv);
    btAdapterClass = env->FindClass("android/bluetooth/BluetoothAdapter");
    if (btAdapterClass == NULL)
    {
     qDebug() << "Qt:Native registration unable to find class
android/bluetooth/BluetoothAdapter";
    }

    jmethodID getDefaultAdapterID =env->GetStaticMethodID(btAdapterClass,
"getDefaultAdapter", "()Landroid/bluetooth/BluetoothAdapter;");
    if(getDefaultAdapterID == NULL){
        qDebug() << "Qt:Native registration unable to get method ID:
getDefaultAdapter of android/bluetooth/BluetoothAdapter";
    }

    btAdapterObject = env->CallStaticObjectMethod(btAdapterClass,
getDefaultAdapterID);
    if(btAdapterObject == NULL){
        qDebug() << "Qt:Device does not support Bluetooth";
    }
    btAdapterObject = env->NewGlobalRef(btAdapterObject);
}

QString BtHost::name() const
{
    qDebug() << " BtHost::name()";
        static jmethodID getNameID = env->GetMethodID(btAdapterClass,
"getName", "()Ljava/lang/String;");
            qDebug() << " QBluetoothLocalDevice::name() env->GetMethodID";
        jstring peerName = (jstring) env->CallObjectMethod(btAdapterObject,
getNameID);
           qDebug() << " QBluetoothLocalDevice::name()
env->CallObjectMethod";
        jboolean isCopy;
        const jchar* name = env->GetStringChars(peerName, &isCopy);
        QString qtName = QString::fromUtf16(name,
env->GetStringLength(peerName));
         qDebug() << " QBluetoothLocalDevice::name() name=" << qtName;
        env->ReleaseStringChars(peerName, name);
         qDebug() <<" QBluetoothLocalDevice::name() exit";
        return qtName;


}




On Thu, Nov 1, 2012 at 7:29 PM, Kate Alhola <kate.alhola at gmail.com> wrote:

> On Mon, Oct 29, 2012 at 10:59 PM, Micke Prag <micke.prag at telldus.se>wrote:
>
>>  Hi,
>>
>> It only happens after I call start(). Only creating the object works fine.
>> Thank you for looking into this.
>>
>
> I noticed that exactly same thing happens with QBluetoothSocket and
> QBluetoothLocalDevice, in both cases they happen If I try use some member
> functions. Creation of object goes OK in both of cases. I posted report to
> android-qt list but may be this is better forum.
>
> Here is two cases where I got same bug
>
> Code:
>      qDebug() << "Turning bluetooth on";
>       localDevice->powerOn();
>
> D/Qt ( 4746): Turning bluetooth on
>
> E/dalvikvm( 4746): JNI ERROR (app bug): accessed stale local reference
> 0x9f50001d (index 7 in a table of size 4)
>
> E/dalvikvm( 4746): VM aborting
>
> Or
>
> from:
>   wmSocket = new QBluetoothSocket(
> QBluetoothSocket::RfcommSocket);
>
>     qDebug() << "btHost::tryConnect()" << wmPulse.address().toString() <<
> ":" << PORT;
>     wmSocket->connectToService(wmPulse.address(), PORT);
>
> D/Qt ( 6195): btHost::tryConnect() "83:7C:82:00:39:31" : 5
>
> E/dalvikvm( 6195): JNI ERROR (app bug): accessed stale local reference
> 0xb3b0001d (index 7 in a table of size 0)
>
> E/dalvikvm( 6195): VM aborting
>
>
> Kate
>
>
>
>>
>> Regards
>> Micke
>>
>> On Monday 29 October 2012 at 21:54, Lauri Laanmets wrote:
>>
>>  Hi
>>
>> I guess that is addressed to me :). Crash is definitely a bug, regardless
>> of Android permissions or missing Java files. Can you verify if it crashes
>> on creating the DiscoveryAgent object or when starting the discovery?
>>
>> I have lost my old devel set-up, It takes me a few days to get on that
>> issue.
>>
>> Regards
>> Lauri
>>
>>
>> On 29.10.2012 22:31, Micke Prag wrote:
>>
>>  Hello,
>>
>>  I know that the Bluetooth support in Necessitas is not complete but I
>> wanted to try it out anyway. I am only trying to discover bluetooth devices
>> but my application crashes. I don't know if I am doing something wrong or
>> if it is not supported yet?
>>
>>  The output from logcat can be found here: http://pastebin.com/khcj28Xy
>> This is what I am doing:
>> QtMobility::QBluetoothDeviceDiscoveryAgent agent;
>> agent.start();
>>
>>  libs.xml:
>>  <?xml version='1.0' encoding='utf-8'?>
>>  <resources>
>>    <array name="qt_libs">
>>      <item>QtCore</item>
>>      <item>QtGui</item>
>>      <item>QtNetwork</item>
>>      <item>QtDeclarative</item>
>>      <item>QtXml</item>
>>      <item>QtOpenGL</item>
>>      <item>QtSystemInfo</item>
>>      <item>QtConnectivity</item>
>>    </array>
>>   <array name="bundled_libs"/>
>> </resources>
>>
>>  I also have this in AndroidManifest.xml:
>> <uses-permission android:name="android.permission.BLUETOOTH" />
>>
>>  Bluetooth is activated on the device.
>>
>>  The device is a Cube U30GT-H running Android 4.1.1
>>
>>  --
>> Micke Prag
>>
>>
>> _______________________________________________
>> Necessitas-devel mailing listNecessitas-devel at kde.orghttps://mail.kde.org/mailman/listinfo/necessitas-devel
>>
>>
>>
>>
>> _______________________________________________
>> Necessitas-devel mailing list
>> Necessitas-devel at kde.org
>> https://mail.kde.org/mailman/listinfo/necessitas-devel
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.kde.org/pipermail/necessitas-devel/attachments/20121108/c0319d46/attachment.html>


More information about the Necessitas-devel mailing list