From: ryo-dairiki <ryo...@us...> - 2006-05-31 15:58:24
|
Update of /cvsroot/scim/scim-bridge/agent In directory sc8-pr-cvs8.sourceforge.net:/tmp/cvs-serv3450/agent Modified Files: Tag: plaintext scim-bridge-agent.cpp Log Message: Index: scim-bridge-agent.cpp =================================================================== RCS file: /cvsroot/scim/scim-bridge/agent/scim-bridge-agent.cpp,v retrieving revision 1.21.2.9 retrieving revision 1.21.2.10 diff -C2 -d -r1.21.2.9 -r1.21.2.10 *** scim-bridge-agent.cpp 31 May 2006 11:13:22 -0000 1.21.2.9 --- scim-bridge-agent.cpp 31 May 2006 15:58:07 -0000 1.21.2.10 *************** *** 17,21 **** using namespace scim; - /* Static constants */ /* Class definition */ --- 17,20 ---- *************** *** 58,61 **** --- 57,62 ---- BackEndPointer scim_backend; + ScimBridgeAgentIMContext *focused_imcontext; + ScimBridgeAgentSocketListener *socket_listener; ScimBridgeAgentPanelListener *panel_listener; *************** *** 96,100 **** ! ScimBridgeAgentImpl::ScimBridgeAgentImpl (): quit_triggered (false) { pthread_mutex_init (&event_clients_mutex, NULL); --- 97,102 ---- ! ScimBridgeAgentImpl::ScimBridgeAgentImpl (): ! quit_triggered (false), focused_imcontext (NULL) { pthread_mutex_init (&event_clients_mutex, NULL); *************** *** 209,212 **** --- 211,215 ---- void ScimBridgeAgentImpl::add_event_client (ScimBridgeAgentEventClient *client) { + if (quit_triggered) return; pthread_mutex_lock (&event_clients_mutex); if (free_event_clients.empty ()) { *************** *** 233,236 **** --- 236,240 ---- void ScimBridgeAgentImpl::remove_event_client (ScimBridgeAgentEventClient *client) { + if (quit_triggered) return; bool found = false; pthread_mutex_lock (&event_clients_mutex); *************** *** 254,267 **** void ScimBridgeAgentImpl::launch () throw (ScimBridgeAgentExcecption) { ! if (pthread_create (&event_dispatcher_thread, NULL, &run_event_dispatcher)) throw ScimBridgeAgentException (strerror (errno)); ! ! const char *exception_message = NULL; ! if (pthread_join (event_dispatcher_thread, &exception)) { ! throw ScimBridgeAgentException (strerror (errno)); ! } else if (exception) { ! ScimBridgeAgentException new_exception (*exception); ! delete exception; ! throw new_exception; ! } } --- 258,263 ---- void ScimBridgeAgentImpl::launch () throw (ScimBridgeAgentExcecption) { ! if (pthread_create (&event_dispatcher_thread, NULL, &run_event_dispatcher)) throw ScimBridgeAgentException ("Cannot invoke the event dispatcher: %s", strerror (errno)); ! if (pthread_join (event_dispatcher_thread, NULL)) throw ScimBridgeAgentException ("Cannot join the event dispatcher: %s", strerror (errno)); } *************** *** 390,395 **** abort (); } ! ScimBridgeIMContext::set_scim_backend (scim_backend); panel_listener = ScimBridgeAgentPanelListener::alloc (scim_config->get_name ()); --- 386,393 ---- abort (); } + + scim_bridge_pdebugln (SCIM_BRIDGE_DEBUG_AGENT, 4, "Initialize scim, done!"); ! ScimBridgeAgentIMContext::static_initialize (scim_backend); panel_listener = ScimBridgeAgentPanelListener::alloc (scim_config->get_name ()); *************** *** 398,403 **** socket_listener = ScimBridgeAgentSocketListener::alloc (); add_event_client (socket_listener); ! ! scim_bridge_pdebugln (SCIM_BRIDGE_DEBUG_AGENT, 4, "Initialize scim, done!"); } --- 396,401 ---- socket_listener = ScimBridgeAgentSocketListener::alloc (); add_event_client (socket_listener); ! ! scim_bridge_pdebugln (SCIM_BRIDGE_DEBUG_AGENT, 4, "ScimBridgeAgent is now ready"); } *************** *** 405,410 **** void ScimBridgeAgentImpl::do_quit () { - pthread_mutex_lock (&event_clients_mutex); quit_triggered = true; for (list<ScimBridgeAgentEventClientID>::iterator i = used_event_clients.begin (); i != used_event_clients.end (); ++i) { ScimBridgeAgentEventClientID client_id = *i; --- 403,408 ---- void ScimBridgeAgentImpl::do_quit () { quit_triggered = true; + pthread_mutex_lock (&event_clients_mutex); for (list<ScimBridgeAgentEventClientID>::iterator i = used_event_clients.begin (); i != used_event_clients.end (); ++i) { ScimBridgeAgentEventClientID client_id = *i; *************** *** 419,421 **** --- 417,423 ---- delete panel_listener; panel_listener = NULL; + + ScimBridgeAgentIMContext::static_finalize (); + + scim_bridge_pdebugln (SCIM_BRIDGE_DEBUG_AGENT, 4, "Finalize, done"); } |