Reviewed, but didn't test. Ack from me. Best regards, Zoran
-----Original Message----- From: Anders Björnerstedt Sent: den 4 september 2014 12:02 To: [email protected]; Zoran Milinkovic Cc: [email protected] Subject: [PATCH 1 of 1] IMM: PBE exits on errors where sqlite-handle has been closed [#996] osaf/services/saf/immsv/immpbed/immpbe.cc | 15 +++++++-------- osaf/services/saf/immsv/immpbed/immpbe_daemon.cc | 8 ++++++-- 2 files changed, 13 insertions(+), 10 deletions(-) Errors returned from calls in the library: osaf/libs/common/immsv/immpbe_dump.cc where the sqlite handle has been closed, are caught by the PBE and result in the PBE exiting. This is a correction to the fix done for ticket #869. That ticket altered these library routines not to exit on error, to allow the users to clean up temporary sqlite files before process exit. The same library functions may also fail (and close the sqlite handle) during normal PBE processing (not during initial generation of the file). This ticket fixes so that the PBE exits, instead of continuing to execute with a closed sqlite handle. diff --git a/osaf/services/saf/immsv/immpbed/immpbe.cc b/osaf/services/saf/immsv/immpbed/immpbe.cc --- a/osaf/services/saf/immsv/immpbed/immpbe.cc +++ b/osaf/services/saf/immsv/immpbed/immpbe.cc @@ -214,8 +214,8 @@ int main(int argc, char* argv[]) /* getClassIdMap */ if(dbHandle) { objCount = verifyPbeState(immHandle, &classIdMap, dbHandle); - TRACE("Classes Verified"); - if(objCount <= 0) {dbHandle = NULL;} + TRACE("Classes Verified?:%d", objCount); + if(objCount <= 0) {dbHandle = NULL;} } if(!dbHandle) { @@ -235,7 +235,7 @@ int main(int argc, char* argv[]) TRACE_1("Opened persistent repository %s", filename.c_str()); } else { /* Any localTmpFile was removed in pbeRepositoryInit */ - LOG_ER("osafimmpbed: pbe intialize failed - exiting"); + LOG_ER("immpbe.cc: pbe intialize failed - exiting"); exit(1); } @@ -247,7 +247,7 @@ int main(int argc, char* argv[]) unlink(localTmpFilename.c_str()); localTmpFilename.clear(); } - LOG_ER("immPbe.cc exiting (line:%u)", __LINE__); + LOG_ER("immpbe.cc: dumpClassesToPbe failed - exiting (line:%u)", +__LINE__); exit(1); } TRACE("Dump classes OK"); @@ -261,7 +261,7 @@ int main(int argc, char* argv[]) unlink(localTmpFilename.c_str()); localTmpFilename.clear(); } - LOG_ER("immPbe.cc exiting (line:%u)", __LINE__); + LOG_ER("immpbe.cc dumpObjectsToPbe failed - exiting (line:%u)", +__LINE__); exit(1); } TRACE("Dump objects OK"); @@ -285,7 +285,7 @@ int main(int argc, char* argv[]) to be used by the pbeDaemon. */ if(fileReOpened) { - LOG_ER("osafimmpbed: will not re-open twice. immPbe.cc exiting (line:%u)", __LINE__); + LOG_ER("immpbe.cc: will not re-open twice. immpbe.cc exiting +(line:%u)", __LINE__); exit(1); } @@ -300,9 +300,8 @@ int main(int argc, char* argv[]) if(!dbHandle) { dbHandle = pbeRepositoryInit(filename.c_str(), false, localTmpFilename); if(!dbHandle) { - LOG_WA("osafimmpbed: pbe intialize failed - exiting"); + LOG_WA("immpbe.cc: pbe intialize failed - exiting"); exit(1); - /* TODO SYNC with pbe-file AND with IMMSv */ } } diff --git a/osaf/services/saf/immsv/immpbed/immpbe_daemon.cc b/osaf/services/saf/immsv/immpbed/immpbe_daemon.cc --- a/osaf/services/saf/immsv/immpbed/immpbe_daemon.cc +++ b/osaf/services/saf/immsv/immpbed/immpbe_daemon.cc @@ -108,8 +108,8 @@ static SaAisErrorT sqlite_prepare_ccb(Sa sClassIdMap, sDbHandle, ++sObjCount, ccbUtilOperationData->param.create.className, ccbId)) { - rc = SA_AIS_ERR_FAILED_OPERATION; - goto ccb_abort; + LOG_ER("objectToPBE failed in sqlite_prepare_ccb. Handle is closed - exiting"); + exit(1); } } while (0); break; @@ -540,6 +540,10 @@ static void saImmOiAdminOperationCallbac if(persistentExtent) { TRACE_5("sObjCount:%u", sObjCount); obj_count = dumpInstancesOfClassToPBE(pbeOmHandle, sClassIdMap, className, &sObjCount, sDbHandle); + if(obj_count < 0) { + LOG_ER("dumpInstncesOfClassesToPBE failed in callback in PBE. sDbHandle is closed - exiting"); + exit(1); + } LOG_NO("PBE dumped %u objects of new class definition for %s", obj_count, className.c_str()); TRACE_5("sObjCount:%u", sObjCount); } ------------------------------------------------------------------------------ Slashdot TV. Video for Nerds. Stuff that matters. http://tv.slashdot.org/ _______________________________________________ Opensaf-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/opensaf-devel
