summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIngo Huerner <ingo.huerner@xse.de>2014-06-30 14:27:58 +0200
committerIngo Huerner <ingo.huerner@xse.de>2014-06-30 14:27:58 +0200
commit2ecacbf0c7fd4255ef52b5a63cab97c85a573d80 (patch)
tree04ed1e230f60b658dbe97e6fe534376c87e0d619
parent02366a34b1995d9085e70343124f207096e59e7a (diff)
downloadpersistence-client-library-2ecacbf0c7fd4255ef52b5a63cab97c85a573d80.tar.gz
removed timeout from poll function as it breaks dbus communication; dbus string optimization
-rw-r--r--src/persistence_client_library.c1
-rw-r--r--src/persistence_client_library_db_access.c19
-rw-r--r--src/persistence_client_library_dbus_cmd.c54
-rw-r--r--src/persistence_client_library_dbus_service.c30
-rw-r--r--src/persistence_client_library_dbus_service.h26
-rw-r--r--src/persistence_client_library_lc_interface.c6
-rw-r--r--src/persistence_client_library_pas_interface.c7
7 files changed, 99 insertions, 44 deletions
diff --git a/src/persistence_client_library.c b/src/persistence_client_library.c
index 0336a77..061433c 100644
--- a/src/persistence_client_library.c
+++ b/src/persistence_client_library.c
@@ -26,6 +26,7 @@
#include "persistence_client_library.h"
#include "persistence_client_library_backup_filelist.h"
#include "persistence_client_library_db_access.h"
+#include "persistence_client_library_dbus_cmd.h"
#if USE_FILECACHE
#include <persistence_file_cache.h>
diff --git a/src/persistence_client_library_db_access.c b/src/persistence_client_library_db_access.c
index e8a5d63..3406849 100644
--- a/src/persistence_client_library_db_access.c
+++ b/src/persistence_client_library_db_access.c
@@ -716,18 +716,17 @@ int persistence_notify_on_change(const char* key, unsigned int ldbid, unsigned i
{
int rval = 0;
- tMainLoopData data;
-
- data.message.cmd = (uint32_t)CMD_REG_NOTIFY_SIGNAL;
- data.message.params[0] = ldbid;
- data.message.params[1] = user_no;
- data.message.params[2] = seat_no;
- data.message.params[3] = regPolicy;
-
- snprintf(data.message.string, DbKeyMaxLen, "%s", key);
-
if(regPolicy < Notify_lastEntry)
{
+ tMainLoopData data;
+
+ data.message.cmd = (uint32_t)CMD_REG_NOTIFY_SIGNAL;
+ data.message.params[0] = ldbid;
+ data.message.params[1] = user_no;
+ data.message.params[2] = seat_no;
+ data.message.params[3] = regPolicy;
+
+ snprintf(data.message.string, DbKeyMaxLen, "%s", key);
if(regPolicy == Notify_register)
{
diff --git a/src/persistence_client_library_dbus_cmd.c b/src/persistence_client_library_dbus_cmd.c
index a380685..4698909 100644
--- a/src/persistence_client_library_dbus_cmd.c
+++ b/src/persistence_client_library_dbus_cmd.c
@@ -27,6 +27,18 @@
#include "persistence_client_library_data_organization.h"
#include "persistence_client_library_db_access.h"
+#if USE_FILECACHE
+ #include <persistence_file_cache.h>
+
+
+ /**
+ * write back from cache to non volatile memory device
+ * ATTENTION:
+ * THIS FUNCTION IS NOT INTENDED TO BE USED BY A NORMAL APPLICATION.
+ * ONLY SPECIAL APPLICATION ARE ALLOWED TO USING USE THIS FUNCTION
+ **/
+ extern int pfcWriteBackAndSync(int handle);
+#endif
// function prototype
void msg_pending_func(DBusPendingCall *call, void *data);
@@ -116,9 +128,9 @@ void process_send_notification_signal(DBusConnection* conn, unsigned int notifyL
snprintf(seatArray, DbusSubMatchSize, "%u", notifySeatNo);
//printf("process_send_Notification_Signal => key: %s | lbid: %d | gUserNo: %d | gSeatNo: %d | gReason: %d \n", gNotifykey, gLdbid, gUserNo, gSeatNo, gReason);
- message = dbus_message_new_signal("/org/genivi/persistence/adminconsumer", // const char *path,
- "org.genivi.persistence.adminconsumer", // const char *interface,
- notifyReasonString); // const char *name
+ message = dbus_message_new_signal(gPersAdminConsumerPath,
+ gDbusPersAdminConsInterface,
+ notifyReasonString);
ret = dbus_message_append_args(message, DBUS_TYPE_STRING, &pnotifyKey,
DBUS_TYPE_STRING, &pldbidArra,
@@ -246,9 +258,9 @@ void process_send_pas_request(DBusConnection* conn, unsigned int requestID, int
DBusError error;
dbus_error_init (&error);
- DBusMessage* message = dbus_message_new_method_call("org.genivi.persistence.admin", // destination
- "/org/genivi/persistence/admin", // path
- "org.genivi.persistence.admin", // interface
+ DBusMessage* message = dbus_message_new_method_call(gDbusPersAdminInterface, // destination
+ gDbusPersAdminPath, // path
+ gDbusPersAdminInterface, // interface
"PersistenceAdminRequestCompleted"); // method
if(conn != NULL)
{
@@ -293,20 +305,19 @@ void process_send_pas_register(DBusConnection* conn, int regType, int notificati
if(conn != NULL)
{
- const char* objName = "/org/genivi/persistence/adminconsumer";
const char* busName = dbus_bus_get_unique_name(conn);
if(busName != NULL)
{
- DBusMessage* message = dbus_message_new_method_call("org.genivi.persistence.admin", // destination
- "/org/genivi/persistence/admin", // path
- "org.genivi.persistence.admin", // interface
- method); // method
+ DBusMessage* message = dbus_message_new_method_call(gDbusPersAdminInterface, // destination
+ gDbusPersAdminPath, // path
+ gDbusPersAdminInterface, // interface
+ method); // method
if(message != NULL)
{
dbus_message_append_args(message, DBUS_TYPE_STRING, &busName, // bus name
- DBUS_TYPE_STRING, &objName,
+ DBUS_TYPE_STRING, &gPersAdminConsumerPath,
DBUS_TYPE_INT32, &notificationFlag,
DBUS_TYPE_UINT32, &gTimeoutMs,
DBUS_TYPE_INVALID);
@@ -356,26 +367,27 @@ void process_send_lifecycle_register(DBusConnection* conn, int regType, int shut
if(conn != NULL)
{
- const char* objName = "/org/genivi/NodeStateManager/LifeCycleConsumer";
const char* busName = dbus_bus_get_unique_name(conn);
- DBusMessage* message = dbus_message_new_method_call("org.genivi.NodeStateManager", // destination
- "/org/genivi/NodeStateManager/Consumer", // path
- "org.genivi.NodeStateManager.Consumer", // interface
+ printf("process_send_lifecycle_register => busName: %s\n", busName);
+
+ DBusMessage* message = dbus_message_new_method_call(gDbusLcConsDest, // destination
+ gDbusLcCons, // path
+ gDbusLcInterface, // interface
method); // method
if(message != NULL)
{
if(regType == 1) // register
{
dbus_message_append_args(message, DBUS_TYPE_STRING, &busName,
- DBUS_TYPE_STRING, &objName,
+ DBUS_TYPE_STRING, &gDbusLcConsPath,
DBUS_TYPE_UINT32, &shutdownMode,
DBUS_TYPE_UINT32, &gTimeoutMs, DBUS_TYPE_INVALID);
}
else // unregister
{
dbus_message_append_args(message, DBUS_TYPE_STRING, &busName,
- DBUS_TYPE_STRING, &objName,
+ DBUS_TYPE_STRING, &gDbusLcConsPath,
DBUS_TYPE_UINT32, &shutdownMode, DBUS_TYPE_INVALID);
}
@@ -406,9 +418,9 @@ void process_send_lifecycle_request(DBusConnection* conn, unsigned int requestId
if(conn != NULL)
{
- DBusMessage* message = dbus_message_new_method_call("org.genivi.NodeStateManager", // destination
- "/org/genivi/NodeStateManager/Consumer", // path
- "org.genivi.NodeStateManager.Consumer", // interface
+ DBusMessage* message = dbus_message_new_method_call(gDbusLcConsDest, // destination
+ gDbusLcCons, // path
+ gDbusLcInterface, // interface
"LifecycleRequestComplete"); // method
if(message != NULL)
{
diff --git a/src/persistence_client_library_dbus_service.c b/src/persistence_client_library_dbus_service.c
index 29dd912..845cc8f 100644
--- a/src/persistence_client_library_dbus_service.c
+++ b/src/persistence_client_library_dbus_service.c
@@ -45,7 +45,21 @@ pthread_cond_t gMainLoopCond = PTHREAD_COND_INITIALIZER;
pthread_t gMainLoopThread;
-//int gEfds; // communication channel int dbus mainloop
+const char* gDbusLcConsDest = "org.genivi.NodeStateManager";
+
+const char* gDbusLcConsterface = "org.genivi.NodeStateManager.LifeCycleConsumer";
+const char* gDbusLcConsPath = "/org/genivi/NodeStateManager/LifeCycleConsumer";
+const char* gDbusLcInterface = "org.genivi.NodeStateManager.Consumer";
+const char* gDbusLcCons = "/org/genivi/NodeStateManager/Consumer";
+const char* gDbusLcConsMsg = "LifecycleRequest";
+
+const char* gDbusPersAdminConsInterface = "org.genivi.persistence.adminconsumer";
+const char* gPersAdminConsumerPath = "/org/genivi/persistence/adminconsumer";
+const char* gDbusPersAdminPath = "/org/genivi/persistence/admin";
+const char* gDbusPersAdminInterface = "org.genivi.persistence.admin";
+const char* gDbusPersAdminConsMsg = "PersistenceAdminRequest";
+
+
int gPipeFd[2] = {0}; // communication channel int dbus mainloop
typedef enum EDBusObjectType
@@ -100,7 +114,7 @@ static DBusHandlerResult handleObjectPathMessageFallback(DBusConnection * connec
(void)user_data;
// org.genivi.persistence.admin S I G N A L
- if((0==strcmp("org.genivi.persistence.admin", dbus_message_get_interface(message))))
+ if((0==strcmp(gDbusPersAdminInterface, dbus_message_get_interface(message))))
{
if(dbus_message_get_type(message) == DBUS_MESSAGE_TYPE_SIGNAL)
{
@@ -116,7 +130,7 @@ static DBusHandlerResult handleObjectPathMessageFallback(DBusConnection * connec
}
}
// org.genivi.persistence.admin S I G N A L
- else if((0==strcmp("org.genivi.persistence.adminconsumer", dbus_message_get_interface(message))))
+ else if((0==strcmp(gDbusPersAdminConsInterface, dbus_message_get_interface(message))))
{
if(dbus_message_get_type(message) == DBUS_MESSAGE_TYPE_SIGNAL)
{
@@ -524,9 +538,9 @@ int mainLoop(DBusObjectPathVTable vtable, DBusObjectPathVTable vtable2,
dbus_bus_add_match(conn, "type='signal',interface='org.genivi.persistence.admin',member='PersistenceModeChanged',path='/org/genivi/persistence/admin'", &err);
// register for messages
- if ( (TRUE==dbus_connection_register_object_path(conn, "/org/genivi/NodeStateManager/LifeCycleConsumer", &vtable2, userData))
+ if ( (TRUE==dbus_connection_register_object_path(conn, gDbusLcConsPath, &vtable2, userData))
#if USE_PASINTERFACE == 1
- && (TRUE==dbus_connection_register_object_path(conn, "/org/genivi/persistence/adminconsumer", &vtable, userData))
+ && (TRUE==dbus_connection_register_object_path(conn, gPersAdminConsumerPath, &vtable, userData))
#endif
&& (TRUE==dbus_connection_register_fallback(conn, "/", &vtableFallback, userData)) )
{
@@ -545,7 +559,7 @@ int mainLoop(DBusObjectPathVTable vtable, DBusObjectPathVTable vtable2,
while (DBUS_DISPATCH_DATA_REMAINS==dbus_connection_dispatch(conn));
- while ((-1==(ret=poll(gPollInfo.fds, gPollInfo.nfds, 750)))&&(EINTR==errno));
+ while ((-1==(ret=poll(gPollInfo.fds, gPollInfo.nfds, -1)))&&(EINTR==errno));
if (0>ret)
{
@@ -664,9 +678,9 @@ int mainLoop(DBusObjectPathVTable vtable, DBusObjectPathVTable vtable2,
while (0!=bContinue);
}
#if USE_PASINTERFACE == 1
- dbus_connection_unregister_object_path(conn, "/org/genivi/persistence/adminconsumer");
+ dbus_connection_unregister_object_path(conn, gPersAdminConsumerPath);
#endif
- dbus_connection_unregister_object_path(conn, "/org/genivi/NodeStateManager/LifeCycleConsumer");
+ dbus_connection_unregister_object_path(conn, gDbusLcConsPath);
dbus_connection_unregister_object_path(conn, "/");
}
//close(gEfds);
diff --git a/src/persistence_client_library_dbus_service.h b/src/persistence_client_library_dbus_service.h
index f03a494..43d4f6a 100644
--- a/src/persistence_client_library_dbus_service.h
+++ b/src/persistence_client_library_dbus_service.h
@@ -55,6 +55,32 @@ typedef enum ECmd
} tCmd;
+
+/// lifecycle consumer interface dbus name
+extern const char* gDbusLcConsterface;
+/// lifecycle consumer dbus interface
+extern const char* gDbusLcCons;
+/// lifecycle consumer dbus destination
+extern const char* gDbusLcConsDest;
+/// lifecycle consumer dbus path
+extern const char* gDbusLcConsPath;
+/// lifecycle consumer debus message
+extern const char* gDbusLcConsMsg;
+/// lifecycle consumer dbus interface
+extern const char* gDbusLcInterface;
+
+/// persistence administrator consumer dbus interface
+extern const char* gDbusPersAdminConsInterface;
+/// persistence administrator consumer dbus
+extern const char* gDbusPersAdminPath;
+/// persistence administrator consumer dbus interface message
+extern const char* gDbusPersAdminConsMsg;
+/// persistence administrator dbus
+extern const char* gDbusPersAdminInterface;
+/// persistence administrator dbus path
+extern const char* gPersAdminConsumerPath;
+
+
/// command data union definition
typedef union MainLoopData{
struct {
diff --git a/src/persistence_client_library_lc_interface.c b/src/persistence_client_library_lc_interface.c
index 45920f7..42b11f9 100644
--- a/src/persistence_client_library_lc_interface.c
+++ b/src/persistence_client_library_lc_interface.c
@@ -136,9 +136,11 @@ DBusHandlerResult checkLifecycleMsg(DBusConnection * connection, DBusMessage * m
(void)user_data;
- if((0==strncmp("org.genivi.NodeStateManager.LifeCycleConsumer", dbus_message_get_interface(message), 46)))
+ printf("checkLifecycleMsg ==> \n Interface: %s \n Message: %s \n", dbus_message_get_interface(message), dbus_message_get_member(message));
+
+ if((0==strncmp(gDbusLcConsterface, dbus_message_get_interface(message), 46)))
{
- if((0==strncmp("LifecycleRequest", dbus_message_get_member(message), 16)))
+ if((0==strncmp(gDbusLcConsMsg, dbus_message_get_member(message), 16)))
{
result = msg_lifecycleRequest(connection, message);
}
diff --git a/src/persistence_client_library_pas_interface.c b/src/persistence_client_library_pas_interface.c
index 89ce225..792f3e4 100644
--- a/src/persistence_client_library_pas_interface.c
+++ b/src/persistence_client_library_pas_interface.c
@@ -29,7 +29,6 @@
/// flag if access is locked
static int gLockAccess = 0;
-
void pers_lock_access(void)
{
__sync_fetch_and_add(&gLockAccess,1);
@@ -208,9 +207,11 @@ DBusHandlerResult checkPersAdminMsg(DBusConnection * connection, DBusMessage * m
(void)user_data;
- if((0==strcmp("org.genivi.persistence.adminconsumer", dbus_message_get_interface(message))))
+ printf("checkPersAdminMsg => \n interface: %s\n Message: %s \n", dbus_message_get_interface(message), dbus_message_get_member(message));
+
+ if((0==strcmp(gDbusPersAdminConsInterface, dbus_message_get_interface(message))))
{
- if((0==strcmp("PersistenceAdminRequest", dbus_message_get_member(message))))
+ if((0==strcmp(gDbusPersAdminConsMsg, dbus_message_get_member(message))))
{
result = msg_persAdminRequest(connection, message);
}