elocation: avoid crash during shutdown due to Ecore_Event queue.

This commit is contained in:
Cedric BAIL 2017-03-09 16:17:24 -08:00
parent c91b4c7065
commit 21ba61be73
1 changed files with 39 additions and 46 deletions

View File

@ -40,20 +40,20 @@ static char nmea_sentence[256];
int _elocation_log_dom = -1;
/* Elocation ecore event types we provide to the application. */
EAPI int ELOCATION_EVENT_STATUS;
EAPI int ELOCATION_EVENT_POSITION;
EAPI int ELOCATION_EVENT_ADDRESS;
EAPI int ELOCATION_EVENT_VELOCITY;
EAPI int ELOCATION_EVENT_GEOCODE;
EAPI int ELOCATION_EVENT_REVERSEGEOCODE;
EAPI int ELOCATION_EVENT_NMEA;
EAPI int ELOCATION_EVENT_SATELLITE;
EAPI int ELOCATION_EVENT_POI;
EAPI int ELOCATION_EVENT_META_READY;
EAPI int ELOCATION_EVENT_STATUS = 0;
EAPI int ELOCATION_EVENT_POSITION = 0;
EAPI int ELOCATION_EVENT_ADDRESS = 0;
EAPI int ELOCATION_EVENT_VELOCITY = 0;
EAPI int ELOCATION_EVENT_GEOCODE = 0;
EAPI int ELOCATION_EVENT_REVERSEGEOCODE = 0;
EAPI int ELOCATION_EVENT_NMEA = 0;
EAPI int ELOCATION_EVENT_SATELLITE = 0;
EAPI int ELOCATION_EVENT_POI = 0;
EAPI int ELOCATION_EVENT_META_READY = 0;
/* Internal events */
int ELOCATION_EVENT_IN;
int ELOCATION_EVENT_OUT;
int ELOCATION_EVENT_IN = 0;
int ELOCATION_EVENT_OUT = 0;
static void
_dummy_free(void *user_data EINA_UNUSED, void *func_data EINA_UNUSED)
@ -1254,40 +1254,20 @@ elocation_init(void)
/* Create all ecore event types we send out to interested applications */
if (ELOCATION_EVENT_IN == 0)
ELOCATION_EVENT_IN = ecore_event_type_new();
if (ELOCATION_EVENT_OUT == 0)
ELOCATION_EVENT_OUT = ecore_event_type_new();
if (ELOCATION_EVENT_STATUS == 0)
ELOCATION_EVENT_STATUS = ecore_event_type_new();
if (ELOCATION_EVENT_POSITION == 0)
ELOCATION_EVENT_POSITION = ecore_event_type_new();
if (ELOCATION_EVENT_ADDRESS == 0)
ELOCATION_EVENT_ADDRESS = ecore_event_type_new();
if (ELOCATION_EVENT_VELOCITY == 0)
ELOCATION_EVENT_VELOCITY = ecore_event_type_new();
if (ELOCATION_EVENT_GEOCODE == 0)
ELOCATION_EVENT_GEOCODE = ecore_event_type_new();
if (ELOCATION_EVENT_REVERSEGEOCODE == 0)
ELOCATION_EVENT_REVERSEGEOCODE = ecore_event_type_new();
if (ELOCATION_EVENT_NMEA == 0)
ELOCATION_EVENT_NMEA = ecore_event_type_new();
if (ELOCATION_EVENT_SATELLITE == 0)
ELOCATION_EVENT_SATELLITE = ecore_event_type_new();
if (ELOCATION_EVENT_POI == 0)
ELOCATION_EVENT_POI = ecore_event_type_new();
if (ELOCATION_EVENT_META_READY == 0)
ELOCATION_EVENT_META_READY = ecore_event_type_new();
{
ELOCATION_EVENT_IN = ecore_event_type_new();
ELOCATION_EVENT_OUT = ecore_event_type_new();
ELOCATION_EVENT_STATUS = ecore_event_type_new();
ELOCATION_EVENT_POSITION = ecore_event_type_new();
ELOCATION_EVENT_ADDRESS = ecore_event_type_new();
ELOCATION_EVENT_VELOCITY = ecore_event_type_new();
ELOCATION_EVENT_GEOCODE = ecore_event_type_new();
ELOCATION_EVENT_REVERSEGEOCODE = ecore_event_type_new();
ELOCATION_EVENT_NMEA = ecore_event_type_new();
ELOCATION_EVENT_SATELLITE = ecore_event_type_new();
ELOCATION_EVENT_POI = ecore_event_type_new();
ELOCATION_EVENT_META_READY = ecore_event_type_new();
}
obj_master= eldbus_object_get(conn, GEOCLUE_DBUS_NAME, GEOCLUE_OBJECT_PATH);
if (!obj_master)
@ -1370,6 +1350,19 @@ elocation_shutdown(void)
}
}
ecore_event_type_flush(ELOCATION_EVENT_IN,
ELOCATION_EVENT_OUT,
ELOCATION_EVENT_STATUS,
ELOCATION_EVENT_POSITION,
ELOCATION_EVENT_ADDRESS,
ELOCATION_EVENT_VELOCITY,
ELOCATION_EVENT_GEOCODE,
ELOCATION_EVENT_REVERSEGEOCODE,
ELOCATION_EVENT_NMEA,
ELOCATION_EVENT_SATELLITE,
ELOCATION_EVENT_POI,
ELOCATION_EVENT_META_READY);
/* Quite a bit of allocated string and generic memory cleanup. This should be
*less when we went away from all this global var business.
*/