Program: 116996
Project: 116996
Buggy source:
public void init(Activity activity){
  if (this.isInitialized)   return;
  this.isInitialized=true;
  this.context=activity;
  this.urlToWebview=new HashMap<String,LeanWebView>();
  this.urlToDisownPolicy=new HashMap<String,WebViewPoolDisownPolicy>();
  this.urlSets=new ArrayList<Set<String>>();
  this.urlsToLoad=new HashSet<String>();
  this.messageReceiver=new BroadcastReceiver(){
    @Override public void onReceive(    Context context,    Intent intent){
      if (intent == null || intent.getAction() == null)       return;
      if (intent.getAction().equals(LeanWebviewClient.STARTED_LOADING_MESSAGE)) {
        WebViewPool pool=WebViewPool.this;
        pool.isMainActivityLoading=true;
        if (pool.currentLoadingWebview != null) {
          pool.currentLoadingWebview.stopLoading();
          pool.isLoading=false;
        }
      }
 else       if (intent.getAction().equals(LeanWebviewClient.FINISHED_LOADING_MESSAGE)) {
        WebViewPool pool=WebViewPool.this;
        pool.isMainActivityLoading=false;
        pool.resumeLoading();
      }
 else       if (intent.getAction().equals(AppConfig.PROCESSED_WEBVIEW_POOLS_MESSAGE)) {
        processConfig();
      }
    }
  }
;
  LocalBroadcastManager.getInstance(this.context).registerReceiver(this.messageReceiver,new IntentFilter(LeanWebviewClient.STARTED_LOADING_MESSAGE));
  LocalBroadcastManager.getInstance(this.context).registerReceiver(this.messageReceiver,new IntentFilter(LeanWebviewClient.FINISHED_LOADING_MESSAGE));
  LocalBroadcastManager.getInstance(this.context).registerReceiver(this.messageReceiver,new IntentFilter(AppConfig.PROCESSED_WEBVIEW_POOLS_MESSAGE));
  this.webviewClient=new WebViewClient(){
    @Override public void onPageFinished(    WebView view,    String url){
      super.onPageFinished(view,url);
      WebViewPool pool=WebViewPool.this;
      view.setWebViewClient(null);
      pool.urlToWebview.put(pool.currentLoadingUrl,pool.currentLoadingWebview);
      pool.currentLoadingUrl=null;
      pool.currentLoadingWebview=null;
      pool.isLoading=false;
      pool.resumeLoading();
    }
    @Override public boolean shouldOverrideUrlLoading(    WebView view,    String url){
      WebViewPool pool=WebViewPool.this;
      if (AppConfig.getInstance(pool.context).interceptHtml) {
        try {
          URL parsedUrl=new URL(url);
          if (parsedUrl.getProtocol().equals("String_Node_Str") || parsedUrl.getProtocol().equals("String_Node_Str")) {
            new WebviewInterceptTask(pool.context,null).execute(new WebviewInterceptTask.WebviewInterceptParams(view,parsedUrl,true));
            return true;
          }
        }
 catch (        Exception e) {
          Log.e(TAG,e.getMessage(),e);
        }
      }
      return false;
    }
  }
;
  processConfig();
}

Fixed version (ground truth):
public void init(Activity activity){
  if (this.isInitialized)   return;
  this.isInitialized=true;
  this.context=activity;
  this.urlToWebview=new HashMap<String,LeanWebView>();
  this.urlToDisownPolicy=new HashMap<String,WebViewPoolDisownPolicy>();
  this.urlSets=new ArrayList<Set<String>>();
  this.urlsToLoad=new HashSet<String>();
  this.messageReceiver=new BroadcastReceiver(){
    @Override public void onReceive(    Context context,    Intent intent){
      if (intent == null || intent.getAction() == null)       return;
      if (intent.getAction().equals(LeanWebviewClient.STARTED_LOADING_MESSAGE)) {
        WebViewPool pool=WebViewPool.this;
        pool.isMainActivityLoading=true;
        if (pool.currentLoadingWebview != null) {
          pool.currentLoadingWebview.stopLoading();
          pool.isLoading=false;
        }
      }
 else       if (intent.getAction().equals(LeanWebviewClient.FINISHED_LOADING_MESSAGE)) {
        WebViewPool pool=WebViewPool.this;
        pool.isMainActivityLoading=false;
        pool.resumeLoading();
      }
 else       if (intent.getAction().equals(AppConfig.PROCESSED_WEBVIEW_POOLS_MESSAGE)) {
        processConfig();
      }
    }
  }
;
  LocalBroadcastManager.getInstance(this.context).registerReceiver(this.messageReceiver,new IntentFilter(LeanWebviewClient.STARTED_LOADING_MESSAGE));
  LocalBroadcastManager.getInstance(this.context).registerReceiver(this.messageReceiver,new IntentFilter(LeanWebviewClient.FINISHED_LOADING_MESSAGE));
  LocalBroadcastManager.getInstance(this.context).registerReceiver(this.messageReceiver,new IntentFilter(AppConfig.PROCESSED_WEBVIEW_POOLS_MESSAGE));
  this.webviewClient=new WebViewClient(){
    @Override public void onPageFinished(    final WebView view,    String url){
      super.onPageFinished(view,url);
      WebViewPool pool=WebViewPool.this;
      context.runOnUiThread(new Runnable(){
        @Override public void run(){
          view.setWebViewClient(null);
        }
      }
);
      pool.urlToWebview.put(pool.currentLoadingUrl,pool.currentLoadingWebview);
      pool.currentLoadingUrl=null;
      pool.currentLoadingWebview=null;
      pool.isLoading=false;
      pool.resumeLoading();
    }
    @Override public boolean shouldOverrideUrlLoading(    WebView view,    String url){
      WebViewPool pool=WebViewPool.this;
      if (AppConfig.getInstance(pool.context).interceptHtml) {
        try {
          URL parsedUrl=new URL(url);
          if (parsedUrl.getProtocol().equals("String_Node_Str") || parsedUrl.getProtocol().equals("String_Node_Str")) {
            new WebviewInterceptTask(pool.context,null).execute(new WebviewInterceptTask.WebviewInterceptParams(view,parsedUrl,true));
            return true;
          }
        }
 catch (        Exception e) {
          Log.e(TAG,e.getMessage(),e);
        }
      }
      return false;
    }
  }
;
  processConfig();
}