///<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();
}
}