If the master is not launched or ready to service,
Viewer should try to connect to it.
To try it, previously, we used timer.
So the viewer tries making connection after every N secs.
It can be harm to the system performance.
So this patch will change it to vconf.
So the master will change the vconf value,
Then the viewer notify its changing, and try to connect to it.
Change-Id: I6fa0a1467e223a917afbedf5aeb473ce9654bfd9
sqlite3
db-util
livebox-service
sqlite3
db-util
livebox-service
)
FOREACH(flag ${pkgs_CFLAGS})
)
FOREACH(flag ${pkgs_CFLAGS})
* \note
* milli seconds
*/
* \note
* milli seconds
*/
-#define RECONNECT_PERIOD 1000
#define MAX_LOG_FILE 3
#define MAX_LOG_LINE 1000
#define SLAVE_LOG_PATH "/opt/usr/share/live_magazine/log"
#define MAX_LOG_FILE 3
#define MAX_LOG_LINE 1000
#define SLAVE_LOG_PATH "/opt/usr/share/live_magazine/log"
+
+#if !defined(VCONFKEY_MASTER_STARTED)
+#define VCONFKEY_MASTER_STARTED "memory/data-provider-master/started"
+#endif
+
+/* End of a file */
Name: liblivebox-viewer
Summary: Library for developing the application.
Name: liblivebox-viewer
Summary: Library for developing the application.
Release: 1
Group: HomeTF/Livebox
License: Flora License
Release: 1
Group: HomeTF/Livebox
License: Flora License
BuildRequires: pkgconfig(sqlite3)
BuildRequires: pkgconfig(db-util)
BuildRequires: pkgconfig(livebox-service)
BuildRequires: pkgconfig(sqlite3)
BuildRequires: pkgconfig(db-util)
BuildRequires: pkgconfig(livebox-service)
+BuildRequires: pkgconfig(vconf)
%description
API for creating a new instance of the livebox and managing its life-cycle.
%description
API for creating a new instance of the livebox and managing its life-cycle.
#include <dlog.h>
#include <glib.h>
#include <dlog.h>
#include <glib.h>
+#include <vconf.h>
+#include <vconf-keys.h>
+
#include <packet.h>
#include <com-core.h>
#include <com-core_packet.h>
#include <packet.h>
#include <com-core.h>
#include <com-core_packet.h>
#include "conf.h"
#include "critical_log.h"
#include "conf.h"
#include "critical_log.h"
-static inline void make_connection(void);
-
static struct info {
int fd;
static struct info {
int fd;
};
static struct packet *master_fault_package(pid_t pid, int handle, const struct packet *packet)
};
static struct packet *master_fault_package(pid_t pid, int handle, const struct packet *packet)
-static gboolean connector_cb(gpointer user_data)
-{
- s_info.reconnector = 0;
-
- if (s_info.fd > 0) {
- DbgPrint("Connection is already made\n");
- return FALSE;
- }
-
- make_connection();
- return FALSE;
-}
-
-static inline void make_connection(void)
+static inline int make_connection(void)
{
struct packet *packet;
int ret;
{
struct packet *packet;
int ret;
s_info.fd = com_core_packet_client_init(CLIENT_SOCKET, 0, s_table);
if (s_info.fd < 0) {
s_info.fd = com_core_packet_client_init(CLIENT_SOCKET, 0, s_table);
if (s_info.fd < 0) {
- /*!< After 10 secs later, try to connect again */
- s_info.reconnector = g_timeout_add(RECONNECT_PERIOD, connector_cb, NULL);
- if (s_info.reconnector == 0)
- ErrPrint("Failed to fire the reconnector\n");
-
- ErrPrint("Try this again A sec later\n");
- return;
+ ErrPrint("Try this again later\n");
+ return LB_STATUS_ERROR_IO;
}
packet = packet_create("acquire", "d", util_timestamp());
if (!packet) {
com_core_packet_client_fini(s_info.fd);
s_info.fd = -1;
}
packet = packet_create("acquire", "d", util_timestamp());
if (!packet) {
com_core_packet_client_fini(s_info.fd);
s_info.fd = -1;
+ return LB_STATUS_ERROR_FAULT;
}
ret = master_rpc_async_request(NULL, packet, 1, acquire_cb, NULL);
}
ret = master_rpc_async_request(NULL, packet, 1, acquire_cb, NULL);
ErrPrint("Master RPC returns %d\n", ret);
com_core_packet_client_fini(s_info.fd);
s_info.fd = -1;
ErrPrint("Master RPC returns %d\n", ret);
com_core_packet_client_fini(s_info.fd);
s_info.fd = -1;
+ return LB_STATUS_ERROR_IO;
+ return LB_STATUS_SUCCESS;
}
static int connected_cb(int handle, void *data)
}
static int connected_cb(int handle, void *data)
+static void master_started_cb(keynode_t *node, void *data)
+{
+ int state = 0;
+
+ if (vconf_get_bool(VCONFKEY_MASTER_STARTED, &state) < 0)
+ ErrPrint("Unable to get [%s]\n", VCONFKEY_MASTER_STARTED);
+
+ DbgPrint("Master state: %d\n", state);
+ if (state == 1 && make_connection() == LB_STATUS_SUCCESS) {
+ int ret;
+ ret = vconf_ignore_key_changed(VCONFKEY_MASTER_STARTED, master_started_cb);
+ DbgPrint("master_started vconf key de-registered [%d]\n", ret);
+ }
+}
+
static int disconnected_cb(int handle, void *data)
{
if (s_info.fd != handle) {
static int disconnected_cb(int handle, void *data)
{
if (s_info.fd != handle) {
s_info.fd = -1; /*!< Disconnected */
s_info.fd = -1; /*!< Disconnected */
- if (s_info.reconnector > 0) {
- DbgPrint("Reconnector already fired\n");
- return 0;
- }
-
- /*!< After 10 secs later, try to connect again */
- s_info.reconnector = g_timeout_add(RECONNECT_PERIOD, connector_cb, NULL);
- if (s_info.reconnector == 0) {
- ErrPrint("Failed to fire the reconnector\n");
- make_connection();
- }
-
master_rpc_clear_all_request();
lb_invoke_fault_handler(LB_FAULT_PROVIDER_DISCONNECTED, MASTER_PKGNAME, "default", "disconnected");
lb_delete_all();
master_rpc_clear_all_request();
lb_invoke_fault_handler(LB_FAULT_PROVIDER_DISCONNECTED, MASTER_PKGNAME, "default", "disconnected");
lb_delete_all();
+
+ if (vconf_notify_key_changed(VCONFKEY_MASTER_STARTED, master_started_cb, NULL) < 0)
+ ErrPrint("Failed to add vconf for monitoring service state\n");
+ else
+ DbgPrint("vconf event callback is registered\n");
+
+ master_started_cb(NULL, NULL);
{
com_core_add_event_callback(CONNECTOR_DISCONNECTED, disconnected_cb, NULL);
com_core_add_event_callback(CONNECTOR_CONNECTED, connected_cb, NULL);
{
com_core_add_event_callback(CONNECTOR_DISCONNECTED, disconnected_cb, NULL);
com_core_add_event_callback(CONNECTOR_CONNECTED, connected_cb, NULL);
+ if (vconf_notify_key_changed(VCONFKEY_MASTER_STARTED, master_started_cb, NULL) < 0)
+ ErrPrint("Failed to add vconf for service state\n");
+ else
+ DbgPrint("vconf event callback is registered\n");
+
+ master_started_cb(NULL, NULL);
com_core_del_event_callback(CONNECTOR_DISCONNECTED, disconnected_cb, NULL);
com_core_del_event_callback(CONNECTOR_CONNECTED, connected_cb, NULL);
s_info.fd = -1;
com_core_del_event_callback(CONNECTOR_DISCONNECTED, disconnected_cb, NULL);
com_core_del_event_callback(CONNECTOR_CONNECTED, connected_cb, NULL);
s_info.fd = -1;
+ return LB_STATUS_SUCCESS;