///<summary>When the edge is finally wrapped, this is called to finalize
    ///the adding of the edge to the edgelistner.</summary>
    protected void Finalize(WrapperEdge wedge) {
      EdgeCreationWrapper ecw = null;
      lock(_sync) {
        if(_edge_to_ecw.ContainsKey(wedge.WrappedEdge)) {
          ecw = _edge_to_ecw[wedge.WrappedEdge];
          _edge_to_ecw.Remove(wedge.WrappedEdge);
          _edge_to_wrapper_edge[wedge.WrappedEdge] = wedge;
        } else {
          throw new Exception("No record of edge");
        }
      }

      // if ecw is null, that means someone else failed before we announced
      // furthermore, we now have a wedge that needs to be manually closed!
      if(ecw != null) {
        ecw.CreationCallback(true, wedge, null);
      } else { 
        wedge.Close();
      }
    }
 ///<summary>This method is usd to wrap the edge.</summary>
 protected virtual void WrapEdge(Edge edge) {
   WrapperEdge wedge = new WrapperEdge(edge);
   Finalize(wedge);
 }