Program: 31988
Project: 31988
Buggy source:
/** 
 * Refresh the turn servers.
 */
private void refreshTurnServer(){
  if (mSuspendTurnServerRefresh) {
    return;
  }
  Log.d(LOG_TAG,"String_Node_Str");
  mUIThreadHandler.post(new Runnable(){
    @Override public void run(){
      mCallResClient.getTurnServer(new ApiCallback<JsonObject>(){
        private void restartAfter(        int msDelay){
          if (null != mTurnServerTimer) {
            mTurnServerTimer.cancel();
          }
          mTurnServerTimer=new Timer();
          mTurnServerTimer.schedule(new TimerTask(){
            @Override public void run(){
              if (mTurnServerTimer != null) {
                mTurnServerTimer.cancel();
                mTurnServerTimer=null;
              }
              refreshTurnServer();
            }
          }
,msDelay);
        }
        @Override public void onSuccess(        JsonObject info){
          Log.d(LOG_TAG,"String_Node_Str");
          if (null != info) {
            if (info.has("String_Node_Str")) {
synchronized (LOG_TAG) {
                mTurnServer=info;
              }
            }
            if (info.has("String_Node_Str")) {
              int ttl=60000;
              try {
                ttl=info.get("String_Node_Str").getAsInt();
                ttl=ttl * 9 / 10;
              }
 catch (              Exception e) {
                Log.e(LOG_TAG,"String_Node_Str" + e.getMessage());
              }
              Log.d(LOG_TAG,"String_Node_Str" + ttl + "String_Node_Str");
              restartAfter(ttl * 1000);
            }
          }
        }
        @Override public void onNetworkError(        Exception e){
          Log.e(LOG_TAG,"String_Node_Str" + e);
          restartAfter(60000);
        }
        @Override public void onMatrixError(        MatrixError e){
          Log.e(LOG_TAG,"String_Node_Str" + e.errcode);
          if (TextUtils.equals(e.errcode,MatrixError.LIMIT_EXCEEDED) && (null != e.retry_after_ms)) {
            Log.e(LOG_TAG,"String_Node_Str" + e.retry_after_ms + "String_Node_Str");
            restartAfter(e.retry_after_ms);
          }
        }
        @Override public void onUnexpectedError(        Exception e){
        }
      }
);
    }
  }
);
}

Fixed version (ground truth):
/** 
 * Refresh the turn servers.
 */
private void refreshTurnServer(){
  if (mSuspendTurnServerRefresh) {
    return;
  }
  Log.d(LOG_TAG,"String_Node_Str");
  mUIThreadHandler.post(new Runnable(){
    @Override public void run(){
      mCallResClient.getTurnServer(new ApiCallback<JsonObject>(){
        private void restartAfter(        int msDelay){
          if (msDelay <= 0) {
            Log.e(LOG_TAG,"String_Node_Str" + msDelay);
          }
 else {
            if (null != mTurnServerTimer) {
              mTurnServerTimer.cancel();
            }
            mTurnServerTimer=new Timer();
            mTurnServerTimer.schedule(new TimerTask(){
              @Override public void run(){
                if (mTurnServerTimer != null) {
                  mTurnServerTimer.cancel();
                  mTurnServerTimer=null;
                }
                refreshTurnServer();
              }
            }
,msDelay);
          }
        }
        @Override public void onSuccess(        JsonObject info){
          Log.d(LOG_TAG,"String_Node_Str");
          if (null != info) {
            if (info.has("String_Node_Str")) {
synchronized (LOG_TAG) {
                mTurnServer=info;
              }
            }
            if (info.has("String_Node_Str")) {
              int ttl=60000;
              try {
                ttl=info.get("String_Node_Str").getAsInt();
                ttl=ttl * 9 / 10;
              }
 catch (              Exception e) {
                Log.e(LOG_TAG,"String_Node_Str" + e.getMessage());
              }
              Log.d(LOG_TAG,"String_Node_Str" + ttl + "String_Node_Str");
              restartAfter(ttl * 1000);
            }
          }
        }
        @Override public void onNetworkError(        Exception e){
          Log.e(LOG_TAG,"String_Node_Str" + e);
          restartAfter(60000);
        }
        @Override public void onMatrixError(        MatrixError e){
          Log.e(LOG_TAG,"String_Node_Str" + e.errcode);
          if (TextUtils.equals(e.errcode,MatrixError.LIMIT_EXCEEDED) && (null != e.retry_after_ms)) {
            Log.e(LOG_TAG,"String_Node_Str" + e.retry_after_ms + "String_Node_Str");
            restartAfter(e.retry_after_ms);
          }
        }
        @Override public void onUnexpectedError(        Exception e){
        }
      }
);
    }
  }
);
}