SLOG(LOG_DEBUG, TAG_VCC, " ");
} /* VCD_METHOD_ERROR */
+ else if (dbus_message_is_signal(msg, "org.freedesktop.DBus", "NameOwnerChanged")) {
+ SLOG(LOG_DEBUG, TAG_VCC, "===== Owner Changed");
+ __vc_cb_error(VC_ERROR_SERVICE_RESET, -1, "Daemon Reset");
+ SLOG(LOG_DEBUG, TAG_VCC, "=====");
+ SLOG(LOG_DEBUG, TAG_VCC, " ");
+ } /* NameOwnerChanged */
+
else {
SLOG(LOG_DEBUG, TAG_VCC, "Message is NOT valid");
dbus_message_unref(msg);
*mgr_pid = tmp;
*service_state = tmp_service_state;
*daemon_pid = tmp_daemon_pid;
+
+ /* add a rule for daemon error */
+ char rule_err[256] = {0, };
+ snprintf(rule_err, 256, "sender='org.freedesktop.DBus',path='/org/freedesktop/DBus',interface='org.freedesktop.DBus',member='NameOwnerChanged',type='signal',arg0='%s'", VC_SERVER_SERVICE_INTERFACE);
+ dbus_bus_add_match(g_conn_listener, rule_err, &err);
+ dbus_connection_flush(g_conn_listener);
+
+ if (dbus_error_is_set(&err)) {
+ SLOG(LOG_ERROR, TAG_VCC, "Match Error (%s)", err.message);
+ dbus_error_free(&err);
+ return VC_ERROR_OPERATION_FAILED;
+ }
+
SLOG(LOG_DEBUG, TAG_VCC, "<<<< vc initialize : result = %d mgr = %d service = %d daemon_pid = %d", result, *mgr_pid, *service_state, *daemon_pid);
} else {
SLOG(LOG_ERROR, TAG_VCC, "<<<< vc initialize : result = %d", result);
int vc_dbus_request_finalize(int pid)
{
+ DBusError err;
+ dbus_error_init(&err);
+
if (0 != __dbus_check()) {
return VC_ERROR_OPERATION_FAILED;
}
+ /* remove a rule for daemon error */
+ char rule_err[256] = {0, };
+ snprintf(rule_err, 256, "sender='org.freedesktop.DBus',path='/org/freedesktop/DBus',interface='org.freedesktop.DBus',member='NameOwnerChanged',type='signal',arg0='%s'", VC_SERVER_SERVICE_INTERFACE);
+ dbus_bus_remove_match(g_conn_listener, rule_err, &err);
+ dbus_connection_flush(g_conn_listener);
+
+ if (dbus_error_is_set(&err)) {
+ SLOG(LOG_ERROR, TAG_VCC, "Match Error (%s)", err.message);
+ dbus_error_free(&err);
+ }
+
DBusMessage* msg;
msg = dbus_message_new_method_call(
dbus_message_append_args(msg, DBUS_TYPE_INT32, &pid, DBUS_TYPE_INVALID);
- DBusError err;
- dbus_error_init(&err);
-
DBusMessage* result_msg;
int result = VC_ERROR_OPERATION_FAILED;
SLOG(LOG_DEBUG, TAG_VCM, " ");
} /* VC_METHOD_AUTH_CANCEL */
+ else if (dbus_message_is_signal(msg, "org.freedesktop.DBus", "NameOwnerChanged")) {
+ SLOG(LOG_DEBUG, TAG_VCM, "===== Owner Changed");
+ __vc_mgr_cb_error(VC_ERROR_SERVICE_RESET, -1, "Daemon Reset");
+ SLOG(LOG_DEBUG, TAG_VCM, "=====");
+ SLOG(LOG_DEBUG, TAG_VCM, " ");
+ } /* NameOwnerChanged */
+
else {
SLOG(LOG_DEBUG, TAG_VCM, "Message is NOT valid");
dbus_message_unref(msg);
*service_state = tmp_service_state;
*foreground = tmp_foreground;
*daemon_pid = tmp_daemon_pid;
+
+ /* add a rule for daemon error */
+ char rule_err[256] = {0, };
+ snprintf(rule_err, 256, "sender='org.freedesktop.DBus',path='/org/freedesktop/DBus',interface='org.freedesktop.DBus',member='NameOwnerChanged',type='signal',arg0='%s'", VC_SERVER_SERVICE_INTERFACE);
+ dbus_bus_add_match(g_m_conn_listener, rule_err, &err);
+ dbus_connection_flush(g_m_conn_listener);
+
+ if (dbus_error_is_set(&err)) {
+ SLOG(LOG_ERROR, TAG_VCM, "Match Error (%s)", err.message);
+ dbus_error_free(&err);
+ }
+
SLOG(LOG_DEBUG, TAG_VCM, "<<<< vc mgr initialize : result = %d, service state = %d, foreground = %d, daemon_pid = %d",
result, *service_state, *foreground, *daemon_pid);
} else {
return VC_ERROR_OPERATION_FAILED;
}
+ /* remove a rule for daemon error */
+ char rule_err[256] = {0, };
+ snprintf(rule_err, 256, "sender='org.freedesktop.DBus',path='/org/freedesktop/DBus',interface='org.freedesktop.DBus',member='NameOwnerChanged',type='signal',arg0='%s'", VC_SERVER_SERVICE_INTERFACE);
+ dbus_bus_remove_match(g_m_conn_listener, rule_err, &err);
+ dbus_connection_flush(g_m_conn_listener);
+
+ if (dbus_error_is_set(&err)) {
+ SLOG(LOG_ERROR, TAG_VCM, "Match Error (%s)", err.message);
+ dbus_error_free(&err);
+ return VC_ERROR_OPERATION_FAILED;
+ }
+
DBusMessage* msg;
msg = dbus_message_new_method_call(
SLOG(LOG_DEBUG, TAG_VCW, " ");
} /* VCD_WIDGET_METHOD_ERROR */
+ else if (dbus_message_is_signal(msg, "org.freedesktop.DBus", "NameOwnerChanged")) {
+ SLOG(LOG_DEBUG, TAG_VCW, "===== Owner Changed");
+ __vc_widget_cb_error(VC_ERROR_SERVICE_RESET, -1, "Daemon Reset");
+ SLOG(LOG_DEBUG, TAG_VCW, "=====");
+ SLOG(LOG_DEBUG, TAG_VCW, " ");
+ } /* NameOwnerChanged */
+
else {
SLOG(LOG_ERROR, TAG_VCW, "Message is NOT valid");
dbus_message_unref(msg);
if (0 == result) {
*service_state = tmp_service_state;
*daemon_pid = tmp_daemon_pid;
+
+ /* add a rule for daemon error */
+ char rule_err[256] = {0, };
+ snprintf(rule_err, 256, "sender='org.freedesktop.DBus',path='/org/freedesktop/DBus',interface='org.freedesktop.DBus',member='NameOwnerChanged',type='signal',arg0='%s'", VC_SERVER_SERVICE_INTERFACE);
+ dbus_bus_add_match(g_w_conn_listener, rule_err, &err);
+ dbus_connection_flush(g_w_conn_listener);
+
+ if (dbus_error_is_set(&err)) {
+ SLOG(LOG_ERROR, TAG_VCW, "Match Error (%s)", err.message);
+ dbus_error_free(&err);
+ return VC_ERROR_OPERATION_FAILED;
+ }
+
SLOG(LOG_DEBUG, TAG_VCW, "<<<< vc widget initialize : result = %d service = %d daemon_pid = %d", result, *service_state, *daemon_pid);
} else {
SLOG(LOG_ERROR, TAG_VCW, "<<<< vc widget initialize : result = %d", result);
int vc_widget_dbus_request_finalize(int pid)
{
+ DBusError err;
+ dbus_error_init(&err);
+
+ /* remove a rule for daemon error */
+ char rule_err[256] = {0, };
+ snprintf(rule_err, 256, "sender='org.freedesktop.DBus',path='/org/freedesktop/DBus',interface='org.freedesktop.DBus',member='NameOwnerChanged',type='signal',arg0='%s'", VC_SERVER_SERVICE_INTERFACE);
+ dbus_bus_remove_match(g_w_conn_listener, rule_err, &err);
+ dbus_connection_flush(g_w_conn_listener);
+
+ if (dbus_error_is_set(&err)) {
+ SLOG(LOG_ERROR, TAG_VCW, "Match Error (%s)", err.message);
+ dbus_error_free(&err);
+ return VC_ERROR_OPERATION_FAILED;
+ }
+
DBusMessage* msg;
msg = dbus_message_new_method_call(
dbus_message_append_args(msg, DBUS_TYPE_INT32, &pid, DBUS_TYPE_INVALID);
- DBusError err;
- dbus_error_init(&err);
-
DBusMessage* result_msg;
int result = VC_ERROR_OPERATION_FAILED;
vcd_finalize();
- vcd_unregister_signal();
-
vcd_dbus_close_connection();
ecore_shutdown();
return ret;
}
-static void __sig_handler(int signo)
-{
- /* restore signal handler */
- signal(signo, SIG_DFL);
- SLOG(LOG_ERROR, TAG_VCD, "[Server ERROR]");
-
- if (0 == vcd_check_dbus_connection()) {
- /* Send error signal for notifying that daemon is reset*/
- vcdc_send_error_signal(VCD_ERROR_SERVICE_RESET, "Daemon reset");
- }
-
- /* invoke signal again */
- raise(signo);
-}
-
-static void __register_sig_handler()
-{
- signal(SIGSEGV, __sig_handler);
- signal(SIGABRT, __sig_handler);
- signal(SIGTERM, __sig_handler);
- signal(SIGINT, __sig_handler);
- signal(SIGQUIT, __sig_handler);
- signal(SIGILL, __sig_handler);
- signal(SIGBUS, __sig_handler);
-}
-
-void vcd_unregister_signal()
-{
- signal(SIGSEGV, SIG_IGN);
- signal(SIGABRT, SIG_IGN);
- signal(SIGTERM, SIG_IGN);
- signal(SIGINT, SIG_IGN);
- signal(SIGQUIT, SIG_IGN);
- signal(SIGILL, SIG_IGN);
- signal(SIGBUS, SIG_IGN);
-}
-
int vcd_initialize()
{
int ret = 0;
- __register_sig_handler();
-
/* Remove old file */
__vcd_file_clean_up();
void vcd_finalize();
-void vcd_unregister_signal();
-
Eina_Bool vcd_cleanup_client_all(void *data);
int vcd_server_get_service_state();