[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