[commit] r2711 - trunk/GME/Core

GMESRC Repository Notifications gme-commit at list.isis.vanderbilt.edu
Fri Nov 10 16:01:47 CST 2017


Author: ksmyth
Date: Fri Nov 10 16:01:46 2017
New Revision: 2711

Log:
Detect when we create an object whose ID has already been allocated

Modified:
   trunk/GME/Core/CoreObject.cpp
   trunk/GME/Core/CoreProject.cpp
   trunk/GME/Core/CoreProject.h

Modified: trunk/GME/Core/CoreObject.cpp
==============================================================================
--- trunk/GME/Core/CoreObject.cpp	Wed Nov  1 16:19:49 2017	(r2710)
+++ trunk/GME/Core/CoreObject.cpp	Fri Nov 10 16:01:46 2017	(r2711)
@@ -40,12 +40,13 @@
 	CComObjPtr<CCoreObject> object;
 	CreateComObject(object);
 
+	project->RegisterObject(metaid, objid, object);
+
 	// nothing will throw here
 	object->project = project;
 	object->objid = objid;
 	object->metaobject = metaobject;
 
-	project->RegisterObject(metaid, objid, object);
 	// the object is ready for deletion
 
 	object->CreateAttributes();

Modified: trunk/GME/Core/CoreProject.cpp
==============================================================================
--- trunk/GME/Core/CoreProject.cpp	Wed Nov  1 16:19:49 2017	(r2710)
+++ trunk/GME/Core/CoreProject.cpp	Fri Nov 10 16:01:46 2017	(r2711)
@@ -677,7 +677,11 @@
 	idpair.objid = objid;
 
 	ASSERT( object_lookup.find(idpair) == object_lookup.end() );
-	object_lookup.insert( object_lookup_type::value_type(idpair, object) );
+	auto old = object_lookup.insert( object_lookup_type::value_type(idpair, object) );
+	if (old.second != true) {
+		// this can happen if the user calls MgaProject::GetObjectByID with and ID that doesn't exist, and then we create an object with that ID
+		COMTHROW(E_INVALIDARG);
+	}
 }
 
 void CCoreProject::UnregisterObject(metaid_type metaid, objid_type objid)

Modified: trunk/GME/Core/CoreProject.h
==============================================================================
--- trunk/GME/Core/CoreProject.h	Wed Nov  1 16:19:49 2017	(r2710)
+++ trunk/GME/Core/CoreProject.h	Fri Nov 10 16:01:46 2017	(r2711)
@@ -186,7 +186,7 @@
 
 	CComObjPtr<CCoreObject> CreateObject(metaid_type metaid);
 
-	void RegisterObject(metaid_type metaid, objid_type objid, CCoreObject *object) NOTHROW;
+	void RegisterObject(metaid_type metaid, objid_type objid, CCoreObject *object);
 	void UnregisterObject(metaid_type metaid, objid_type objid) NOTHROW;
 
 	void CastProject(ICoreProject *project) const;		// throws E_SAMEPROJECT


More information about the gme-commit mailing list