@@ -1029,7 +1029,21 @@ void Baseapp::onCreateBaseFromDBIDCallback(Network::Channel* pChannel, KBEngine:
1029
1029
}
1030
1030
else
1031
1031
{
1032
- baseRef = static_cast <PyObject*>(new EntityMailbox (EntityDef::findScriptModule (entityType.c_str ()), NULL , wasActiveCID, wasActiveEntityID, MAILBOX_TYPE_BASE));
1032
+ // 如果createBaseFromDBID类接口返回实体已经检出且在当前进程上,但是当前进程上无法找到实体时应该给出错误
1033
+ // 这种情况通常是异步的环境中从db查询到已经检出,但等回调时可能实体已经销毁了而造成的
1034
+ if (wasActiveCID != g_componentID)
1035
+ {
1036
+ baseRef = static_cast <PyObject*>(new EntityMailbox (EntityDef::findScriptModule (entityType.c_str ()), NULL , wasActiveCID, wasActiveEntityID, MAILBOX_TYPE_BASE));
1037
+ }
1038
+ else
1039
+ {
1040
+ ERROR_MSG (fmt::format (" Baseapp::onCreateBaseFromDBID: create {}({}) is failed! A local reference, But it has been destroyed!\n " ,
1041
+ entityType.c_str (), dbid));
1042
+
1043
+ baseRef = Py_None;
1044
+ Py_INCREF (baseRef);
1045
+ wasActive = false ;
1046
+ }
1033
1047
}
1034
1048
}
1035
1049
else
@@ -1038,7 +1052,7 @@ void Baseapp::onCreateBaseFromDBIDCallback(Network::Channel* pChannel, KBEngine:
1038
1052
Py_INCREF (baseRef);
1039
1053
wasActive = false ;
1040
1054
1041
- ERROR_MSG (fmt::format (" Baseapp::onCreateBaseFromDBID: create {}({}) is failed. \n " ,
1055
+ ERROR_MSG (fmt::format (" Baseapp::onCreateBaseFromDBID: create {}({}) is failed! \n " ,
1042
1056
entityType.c_str (), dbid));
1043
1057
}
1044
1058
@@ -1272,7 +1286,21 @@ void Baseapp::onCreateBaseAnywhereFromDBIDCallback(Network::Channel* pChannel, K
1272
1286
}
1273
1287
else
1274
1288
{
1275
- baseRef = static_cast <PyObject*>(new EntityMailbox (EntityDef::findScriptModule (entityType.c_str ()), NULL , wasActiveCID, wasActiveEntityID, MAILBOX_TYPE_BASE));
1289
+ // 如果createBaseFromDBID类接口返回实体已经检出且在当前进程上,但是当前进程上无法找到实体时应该给出错误
1290
+ // 这种情况通常是异步的环境中从db查询到已经检出,但等回调时可能实体已经销毁了而造成的
1291
+ if (wasActiveCID != g_componentID)
1292
+ {
1293
+ baseRef = static_cast <PyObject*>(new EntityMailbox (EntityDef::findScriptModule (entityType.c_str ()), NULL , wasActiveCID, wasActiveEntityID, MAILBOX_TYPE_BASE));
1294
+ }
1295
+ else
1296
+ {
1297
+ ERROR_MSG (fmt::format (" Baseapp::onCreateBaseFromDBID: create {}({}) is failed! A local reference, But it has been destroyed!\n " ,
1298
+ entityType.c_str (), dbid));
1299
+
1300
+ baseRef = Py_None;
1301
+ Py_INCREF (baseRef);
1302
+ wasActive = false ;
1303
+ }
1276
1304
}
1277
1305
}
1278
1306
else
0 commit comments