Ignore:
Timestamp:
Feb 16, 2018 9:37:00 AM (7 years ago)
Author:
nanang
Message:

Misc (#2059): Update Android & Java app samples to avoid call instance deletion in the library callback context (thanks Kai Ludwig for the feedbacks).

Location:
pjproject/trunk/pjsip-apps/src/swig/java/android/app/src/main/java/org/pjsip/pjsua2/app
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk/pjsip-apps/src/swig/java/android/app/src/main/java/org/pjsip/pjsua2/app/MainActivity.java

    r5649 r5738  
    233233        } else if (m.what == MSG_TYPE.CALL_STATE) { 
    234234 
    235             CallInfo ci = (CallInfo) m.obj; 
    236  
    237             /* Forward the message to CallActivity */ 
    238             if (CallActivity.handler_ != null) { 
     235            MyCall call = (MyCall) m.obj; 
     236            CallInfo ci; 
     237            try { 
     238                ci = call.getInfo(); 
     239            } catch (Exception e) { 
     240                ci = null; 
     241            } 
     242 
     243            /* Forward the call info to CallActivity */ 
     244            if (ci != null && CallActivity.handler_ != null) { 
    239245                Message m2 = Message.obtain(CallActivity.handler_, 
    240246                    MSG_TYPE.CALL_STATE, ci); 
    241247                m2.sendToTarget(); 
     248            } 
     249 
     250            if (ci != null && 
     251                ci.getState() == pjsip_inv_state.PJSIP_INV_STATE_DISCONNECTED) 
     252            { 
     253                call.delete(); 
    242254            } 
    243255 
     
    602614            ci = null; 
    603615        } 
    604         Message m = Message.obtain(handler, MSG_TYPE.CALL_STATE, ci); 
     616        Message m = Message.obtain(handler, MSG_TYPE.CALL_STATE, call); 
    605617        m.sendToTarget(); 
    606618 
  • pjproject/trunk/pjsip-apps/src/swig/java/android/app/src/main/java/org/pjsip/pjsua2/app/MyApp.java

    r5649 r5738  
    6262    public void onCallState(OnCallStateParam prm) 
    6363    { 
    64             MyApp.observer.notifyCallState(this); 
    65             try { 
    66                 CallInfo ci = getInfo(); 
    67                 if (ci.getState() ==  
    68                     pjsip_inv_state.PJSIP_INV_STATE_DISCONNECTED) 
    69                 { 
    70                     MyApp.ep.utilLogWrite(3, "MyCall", this.dump(true, "")); 
    71                     this.delete(); 
    72                 } 
    73             } catch (Exception e) { 
    74                 return; 
    75             } 
     64        try { 
     65            CallInfo ci = getInfo(); 
     66            if (ci.getState() ==  
     67                pjsip_inv_state.PJSIP_INV_STATE_DISCONNECTED) 
     68            { 
     69                MyApp.ep.utilLogWrite(3, "MyCall", this.dump(true, "")); 
     70            } 
     71        } catch (Exception e) { 
     72        } 
     73         
     74        // Should not delete this call instance (self) in this context, 
     75        // so the observer should manage this call instance deletion 
     76        // out of this callback context. 
     77        MyApp.observer.notifyCallState(this); 
    7678    } 
    7779 
Note: See TracChangeset for help on using the changeset viewer.