Fatal Signal 6 SIGABRT code=-6
Asked Answered
D

1

12

i'm writing an android program for visualizing the audio signal. The main activity is:

package com.example.soundvisualizer;
import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.util.Log;
import android.view.Display;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends Activity implements OnClickListener {
private CDrawer.CDrawThread mDrawThread;
private CDrawer mdrawer;
private Button btn;
private View.OnClickListener listener;
private Boolean m_bStart;
private Boolean recording;
private CSampler sampler;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    m_bStart = false;
    mdrawer = (CDrawer) findViewById(R.id.drawer);
    while (true){
        recording = false;
        run();    
        return; 
    }  
}

/**
 * Pause the visualizer when the app is paused
 */
@Override
protected void onPause(){
    System.out.println("onPause");
    sampler.SetRun(false);
    mDrawThread.setRun(false);
    sampler.SetSleeping(true);
    mDrawThread.SetSleeping(true);
    super.onPause();
}
/**
 * Resters the visualizer when the app restarts
 */
@Override
protected void onRestart(){
    m_bStart = true;
    System.out.println("onRestart");
    super.onRestart();
}
/**
 * Resume the visualizer when the app resumes
 */
@Override
protected void onResume(){
    System.out.println("onResume");
    int i = 0;
    while (true){
        if ((sampler.GetDead2()) && (mdrawer.GetDead2())){
            System.out.println(sampler.GetDead2() + ", " + mdrawer.GetDead2());
            sampler.Restart();
            if (!m_bStart.booleanValue())
                mdrawer.Restart(true);
            sampler.SetSleeping(false);
            mDrawThread.SetSleeping(false);
            m_bStart = false;
            super.onResume();
            return;
        }
        try{
            Thread.sleep(500L);
            System.out.println("Hang on..");
            i++;
            if (!sampler.GetDead2().booleanValue())
                System.out.println("sampler not DEAD!!!");
            if (!mdrawer.GetDead2().booleanValue()){
                System.out.println("mDrawer not DeAD!!");
                mdrawer.SetRun(false);
            }
            if (i <= 4)
                continue;
            mDrawThread.SetDead2(true);
        }
        catch (InterruptedException localInterruptedException){
            localInterruptedException.printStackTrace();
        }
    }   
}

@Override
protected void onStart(){
    System.out.println("onStart");
    super.onStart();
}

@Override
protected void onStop(){
    System.out.println("onStop");
    super.onStop();
}


/** 
 * Recives the buffert from the sampler
 * @param buffert
 */
public void setBuffer(short[] paramArrayOfShort){
    mDrawThread = mdrawer.getThread();
    mDrawThread.setBuffer(paramArrayOfShort);
}

/**
 * Called by OnCreate to get everything up and running
 */
public void run(){
    try {
        if (mDrawThread == null){
            mDrawThread = mdrawer.getThread();
        }
        if (sampler == null)
            sampler = new CSampler(this);
        Context localContext = getApplicationContext();
        Display localDisplay = getWindowManager().getDefaultDisplay();
        Toast localToast = Toast.makeText(localContext, "Please make some noise..", Toast.LENGTH_LONG);
        localToast.show();
        if (sampler != null){
            try {
                sampler.Init();
            } 
            catch (Exception e) {
                Toast.makeText(this,"Could not instance the sampler. Could not access the device audio-drivers", Toast.LENGTH_LONG).show();
            }
            btn = (Button) this.findViewById(R.id.button_stop);
            btn.setOnClickListener(this);
            sampler.StartRecording();
            sampler.StartSampling();
        }
      }
    catch (NullPointerException e) {
        Log.e("Main_Run", "NullPointer: " + e.getMessage());
    }
}

@Override
public void onClick(View v) {
    // TODO Auto-generated method stub
    if(btn.getText().equals("Start")){
        btn.setText("Stop");
        sampler.StartRecording();
        sampler.StartSampling();
    }
    else{
        btn.setText("Start");
        sampler.StopRecording();
    }
}

}

Now, the app starts and works fine. i click the stop button and it is ok. reclick start and the restart works fine. when I click Stop again the app crashes and the logcat displays the following lines reguarding my app:

I/ActivityManager(  755): START u0 {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.example.soundvisualizer/.MainActivity} from pid 1054
I/ActivityManager(  755): Start proc com.example.soundvisualizer for activity com.example.soundvisualizer/.MainActivity: pid=6959 uid=10126 gids={50126}
I/ActivityManager(  755): Displayed com.example.soundvisualizer/.MainActivity: +710ms
W/ActivityManager(  755):   Force finishing activity com.example.soundvisualizer/.MainActivity
W/ActivityManager(  755): Exception thrown during pause
W/ActivityManager(  755): android.os.DeadObjectException
W/ActivityManager(  755):   at android.os.BinderProxy.transact(Native Method)
W/ActivityManager(  755):   at android.app.ApplicationThreadProxy.schedulePauseActivity(ApplicationThreadNative.java:660)
W/ActivityManager(  755):   at com.android.server.am.ActivityStack.startPausingLocked(ActivityStack.java:761)
W/ActivityManager(  755):   at com.android.server.am.ActivityStack.finishActivityLocked(ActivityStack.java:2455)
W/ActivityManager(  755):   at com.android.server.am.ActivityStack.finishTopRunningActivityLocked(ActivityStack.java:2329)
W/ActivityManager(  755):   at com.android.server.am.ActivityStackSupervisor.finishTopRunningActivityLocked(ActivityStackSupervisor.java:2035)
W/ActivityManager(  755):   at com.android.server.am.ActivityManagerService.handleAppCrashLocked(ActivityManagerService.java:9543)
W/ActivityManager(  755):   at com.android.server.am.ActivityManagerService.makeAppCrashingLocked(ActivityManagerService.java:9436)
W/ActivityManager(  755):   at com.android.server.am.ActivityManagerService.crashApplication(ActivityManagerService.java:10081)
W/ActivityManager(  755):   at com.android.server.am.ActivityManagerService.handleApplicationCrashInner(ActivityManagerService.java:9632)
W/ActivityManager(  755):   at com.android.server.am.NativeCrashListener$NativeCrashReporter.run(NativeCrashListener.java:86)
I/ActivityManager(  755): Config changes=480 {1.0 222mcc10mnc it_IT ldltr sw360dp w360dp h567dp 480dpi nrml port finger -keyb/v/h -nav/h s.583}
I/ActivityManager(  755): Process com.example.soundvisualizer (pid 6959) has died.
W/ActivityManager(  755): No content provider found for permission revoke: file:///data/local/tmp/SoundVisualizer.apk
W/ActivityManager(  755): No content provider found for permission revoke: file:///data/local/tmp/SoundVisualizer.apk
I/ActivityManager(  755): Force stopping com.example.soundvisualizer appid=10126 user=-1: uninstall pkg
I/ActivityManager(  755): Force stopping com.example.soundvisualizer appid=10126 user=-1: update pkg
I/ActivityManager(  755): Force stopping com.example.soundvisualizer appid=10126 user=0: pkg removed

I have no idea about what causes the error and how can I fix it. Can anyone help me? Thanks in advance.

Edit I found this link in which is explained what type of error sigabrt is. the table says that sigabrt can be disabled by using -Xrs. How can I use -Xrs in Eclipse IDE??

Durrell answered 22/3, 2014 at 11:40 Comment(9)
You need to post a more complete stack trace so that we can see what the actual problem is.Blowfish
@ChrisStratton I edited the post with the screenshot of the LogCat. This is all. I dont understand which is the problem.Durrell
Use the command line logcat tool, you should be capturing a hundred lines or so of information from an error like this. And don't post a screenshot, but copy and paste the actual text.Blowfish
@ChrisStratton I just edited the post with the logcat lines.Durrell
One thing you should definitely not be doing is sleeping for half a second in a UI thread event method!Blowfish
@ChrisStratton I deleted the Thread.sleep() in the onResume() method but nothing changedDurrell
Make sure none of your other UI thread methods can take more than a handful of milliseconds either.Blowfish
@ChrisStratton I deleted all the Thread.sleep() calls and the problem persists. Maybe something else causes the crash. I noticed something strange. when i click "Start" for the second time the crash message appears, You know like "The application SoundVisualizer is blocked in an abnormal way". but the application does not crash completely even if I click OK. the app is in the background, it is paused and I can resume it normally.Durrell
You need to figure out where it is being delayed, and fix that, as Android does not tolerate delay on the UI thread.Blowfish
A
3

That happens to me in this case:

  • I load a View onCreate and after a Function is called very fast and access to that view.

The View can be null in some instant!!!

in your case put this each time that you access to that view:

if(mdrawer!=null){
   //DO Whatever
}else{
   Log.e(TAG,"ANDROID BUG");
}

EDIT: I have realized that it wasn't because the function called very fast. It was because I have a Listener and I didn't unregister when OnDestroy(). And When OnCreate, I had two listener. One with NULL result and the other one OK.

@Override
public void onDestroy() {                       
    super.onDestroy();
    if (mSensorManager!=null){mSensorManager.unregisterListener(listener);}
}
Anisotropic answered 11/2, 2015 at 3:30 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.