Program: 35658
Project: 35658
Buggy source:
private void joinRoomAndCall(){
  ncApi.joinRoom(credentials,ApiHelper.getUrlForRoom(userEntity.getBaseUrl(),roomToken)).subscribeOn(Schedulers.newThread()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer<CallOverall>(){
    @Override public void onSubscribe(    Disposable d){
    }
    @Override public void onNext(    CallOverall callOverall){
      ncApi.joinCall(credentials,ApiHelper.getUrlForCall(userEntity.getBaseUrl(),roomToken)).subscribeOn(Schedulers.newThread()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer<GenericOverall>(){
        @Override public void onSubscribe(        Disposable d){
        }
        @Override public void onNext(        GenericOverall genericOverall){
          callSession=callOverall.getOcs().getData().getSessionId();
          ncApi.pingCall(ApiHelper.getCredentials(userEntity.getUsername(),userEntity.getToken()),ApiHelper.getUrlForCallPing(userEntity.getBaseUrl(),roomToken)).subscribeOn(Schedulers.newThread()).observeOn(AndroidSchedulers.mainThread()).repeatWhen(completed -> completed.delay(5000,TimeUnit.MILLISECONDS)).repeatUntil(booleanSupplier).retry(3).subscribe(new Observer<GenericOverall>(){
            @Override public void onSubscribe(            Disposable d){
              pingDisposable=d;
            }
            @Override public void onNext(            GenericOverall genericOverall){
            }
            @Override public void onError(            Throwable e){
              dispose(pingDisposable);
            }
            @Override public void onComplete(){
              dispose(pingDisposable);
            }
          }
);
          ncApi.pullSignalingMessages(ApiHelper.getCredentials(userEntity.getUsername(),userEntity.getToken()),ApiHelper.getUrlForSignaling(userEntity.getBaseUrl())).subscribeOn(Schedulers.newThread()).observeOn(AndroidSchedulers.mainThread()).repeatWhen(observable -> observable.delay(1500,TimeUnit.MILLISECONDS)).repeatUntil(booleanSupplier).retry(3).subscribe(new Observer<SignalingOverall>(){
            @Override public void onSubscribe(            Disposable d){
              signalingDisposable=d;
            }
            @Override public void onNext(            SignalingOverall signalingOverall){
              if (signalingOverall.getOcs().getSignalings() != null) {
                for (int i=0; i < signalingOverall.getOcs().getSignalings().size(); i++) {
                  try {
                    receivedSignalingMessage(signalingOverall.getOcs().getSignalings().get(i));
                  }
 catch (                  IOException e) {
                    e.printStackTrace();
                  }
                }
              }
            }
            @Override public void onError(            Throwable e){
              dispose(signalingDisposable);
            }
            @Override public void onComplete(){
              dispose(signalingDisposable);
            }
          }
);
        }
        @Override public void onError(        Throwable e){
        }
        @Override public void onComplete(){
        }
      }
);
    }
    @Override public void onError(    Throwable e){
    }
    @Override public void onComplete(){
    }
  }
);
}

Fixed version (ground truth):
private void joinRoomAndCall(){
  ncApi.joinRoom(credentials,ApiHelper.getUrlForRoom(userEntity.getBaseUrl(),roomToken)).subscribeOn(Schedulers.newThread()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer<CallOverall>(){
    @Override public void onSubscribe(    Disposable d){
    }
    @Override public void onNext(    CallOverall callOverall){
      ncApi.joinCall(credentials,ApiHelper.getUrlForCall(userEntity.getBaseUrl(),roomToken)).subscribeOn(Schedulers.newThread()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer<GenericOverall>(){
        @Override public void onSubscribe(        Disposable d){
        }
        @Override public void onNext(        GenericOverall genericOverall){
          callSession=callOverall.getOcs().getData().getSessionId();
          ncApi.pingCall(ApiHelper.getCredentials(userEntity.getUsername(),userEntity.getToken()),ApiHelper.getUrlForCallPing(userEntity.getBaseUrl(),roomToken)).subscribeOn(Schedulers.newThread()).observeOn(AndroidSchedulers.mainThread()).repeatWhen(completed -> completed.delay(5000,TimeUnit.MILLISECONDS)).repeatUntil(booleanSupplier).retry(3).subscribe(new Observer<GenericOverall>(){
            @Override public void onSubscribe(            Disposable d){
              pingDisposable=d;
            }
            @Override public void onNext(            GenericOverall genericOverall){
            }
            @Override public void onError(            Throwable e){
              dispose(pingDisposable);
            }
            @Override public void onComplete(){
              dispose(pingDisposable);
            }
          }
);
          ncApi.pullSignalingMessages(ApiHelper.getCredentials(userEntity.getUsername(),userEntity.getToken()),ApiHelper.getUrlForSignaling(userEntity.getBaseUrl())).subscribeOn(Schedulers.newThread()).observeOn(AndroidSchedulers.mainThread()).repeatWhen(observable -> observable.delay(1500,TimeUnit.MILLISECONDS)).repeatUntil(booleanSupplier).retry(3).subscribe(new Observer<SignalingOverall>(){
            @Override public void onSubscribe(            Disposable d){
              signalingDisposable=d;
            }
            @Override public void onNext(            SignalingOverall signalingOverall){
              if (signalingOverall.getOcs().getSignalings() != null) {
                for (int i=0; i < signalingOverall.getOcs().getSignalings().size(); i++) {
                  try {
                    receivedSignalingMessage(signalingOverall.getOcs().getSignalings().get(i));
                  }
 catch (                  IOException e) {
                    e.printStackTrace();
                  }
                }
              }
            }
            @Override public void onError(            Throwable e){
              Log.d("String_Node_Str",e.getLocalizedMessage());
              dispose(signalingDisposable);
            }
            @Override public void onComplete(){
              dispose(signalingDisposable);
            }
          }
);
        }
        @Override public void onError(        Throwable e){
          Log.d("String_Node_Str",e.getLocalizedMessage());
        }
        @Override public void onComplete(){
        }
      }
);
    }
    @Override public void onError(    Throwable e){
    }
    @Override public void onComplete(){
    }
  }
);
}