summaryrefslogtreecommitdiff
path: root/src/key-value-store/pers_low_level_db_access.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/key-value-store/pers_low_level_db_access.c')
-rw-r--r--src/key-value-store/pers_low_level_db_access.c56
1 files changed, 40 insertions, 16 deletions
diff --git a/src/key-value-store/pers_low_level_db_access.c b/src/key-value-store/pers_low_level_db_access.c
index f1c1a42..cfc5ffc 100644
--- a/src/key-value-store/pers_low_level_db_access.c
+++ b/src/key-value-store/pers_low_level_db_access.c
@@ -155,6 +155,29 @@ static int openCache(KISSDB* db);
//static int addCache(KISSDB* db);
static int closeCache(KISSDB* db);
+
+
+__attribute__((constructor))
+static void pco_library_init()
+{
+ pid_t pid = getpid();
+ str_t dltContextID[16]; /* should be at most 4 characters string, but colissions occure */
+
+ /* init DLT */
+ (void) snprintf(dltContextID, sizeof(dltContextID), "Pers_%04d", pid);
+ DLT_REGISTER_CONTEXT(persComLldbDLTCtx, dltContextID, "PersCommonLLDB");
+ //DLT_SET_APPLICATION_LL_TS_LIMIT(DLT_LOG_DEBUG, DLT_TRACE_STATUS_OFF);
+ DLT_LOG(persComLldbDLTCtx, DLT_LOG_DEBUG, DLT_STRING(LT_HDR); DLT_STRING(__FUNCTION__); DLT_STRING(":"); DLT_STRING("register context PersCommonLLDB ContextID="); DLT_STRING(dltContextID));
+}
+
+__attribute__((destructor))
+static void pco_library_destroy()
+{
+ DLT_UNREGISTER_CONTEXT(persComLldbDLTCtx);
+}
+
+
+
/**
* \open or create a key-value database
* \note : DB type is identified from dbPathname (based on extension)
@@ -177,25 +200,9 @@ sint_t pers_lldb_open(str_t const* dbPathname, pers_lldb_purpose_e ePurpose, boo
int writeMode = KISSDB_WRITE_MODE_WC; //default is write cached
lldb_handler_s* pLldbHandler = NIL;
sint_t returnValue = PERS_COM_FAILURE;
- static bool_t bFirstCall = true;
path = dbPathname;
- if (bFirstCall)
- {
- pid_t pid = getpid();
- str_t dltContextID[16]; /* should be at most 4 characters string, but colissions occure */
-
- /* set an error handler - the default one will cause the termination of the calling process */
- bFirstCall = false;
- /* init DLT */
- (void) snprintf(dltContextID, sizeof(dltContextID), "Pers_%04d", pid);
- DLT_REGISTER_CONTEXT(persComLldbDLTCtx, dltContextID, "PersCommonLLDB");
- //DLT_SET_APPLICATION_LL_TS_LIMIT(DLT_LOG_DEBUG, DLT_TRACE_STATUS_OFF);
- DLT_LOG(persComLldbDLTCtx, DLT_LOG_DEBUG,
- DLT_STRING(LT_HDR); DLT_STRING(__FUNCTION__); DLT_STRING(":"); DLT_STRING("register context PersCommonLLDB ContextID="); DLT_STRING(dltContextID));
- }
-
DLT_LOG(persComLldbDLTCtx, DLT_LOG_DEBUG,
DLT_STRING(LT_HDR); DLT_STRING(__FUNCTION__); DLT_STRING("Begin opening:"); DLT_STRING("<"); DLT_STRING(dbPathname); DLT_STRING(">, ");
((PersLldbPurpose_RCT == ePurpose) ? DLT_STRING("RCT, ") : DLT_STRING("DB, ")); ((true == bForceCreationIfNotPresent) ? DLT_STRING("forced, ") : DLT_STRING("unforced, ")));
@@ -1005,7 +1012,12 @@ static sint_t DeleteDataFromKissDB(sint_t dbHandler, pconststr_t key)
}
}
+
+#if USE_FSYNC
+ fsync(pLldbHandler->kissDb.fd);
+#else
fdatasync(pLldbHandler->kissDb.fd);
+#endif
}
Kdb_unlock(&pLldbHandler->kissDb.shared->rwlock);
}
@@ -1079,7 +1091,11 @@ static sint_t DeleteDataFromKissRCT(sint_t dbHandler, pconststr_t key)
}
}
+#if USE_FSYNC
+ fsync(pLldbHandler->kissDb.fd);
+#else
fdatasync(pLldbHandler->kissDb.fd);
+#endif
}
Kdb_unlock(&pLldbHandler->kissDb.shared->rwlock);
}
@@ -1300,7 +1316,11 @@ static sint_t SetDataInKissLocalDB(sint_t dbHandler, pconststr_t key, pconststr_
DLT_STRING(__FUNCTION__); DLT_STRING(":"); DLT_STRING("KISSDB_put: key=<"); DLT_STRING(metaKey); DLT_STRING(">, "); DLT_STRING("WriteThrough to file failed with retval=<"); DLT_INT(bytesWritten); DLT_STRING(">"));
}
+#if USE_FSYNC
+ fsync(pLldbHandler->kissDb.fd);
+#else
fdatasync(pLldbHandler->kissDb.fd);
+#endif
}
}
Kdb_unlock(&pLldbHandler->kissDb.shared->rwlock);
@@ -1387,7 +1407,11 @@ static sint_t SetDataInKissRCT(sint_t dbHandler, pconststr_t key, PersistenceCon
DLT_STRING(__FUNCTION__); DLT_STRING(":"); DLT_STRING("KISSDB_put: RCT key=<"); DLT_STRING(metaKey); DLT_STRING(">, "); DLT_STRING("WriteThrough to file failed with retval=<"); DLT_INT(bytesWritten); DLT_STRING(">"));
}
+#if USE_FSYNC
+ fsync(pLldbHandler->kissDb.fd);
+#else
fdatasync(pLldbHandler->kissDb.fd);
+#endif
}
}
Kdb_unlock(&pLldbHandler->kissDb.shared->rwlock);