Fix appcore_base_flush_memory API
[platform/core/appfw/app-core.git] / src / base / appcore_base.c
index d0d27ba..cc311a9 100644 (file)
@@ -45,6 +45,7 @@
 #define RESOURCED_FREEZER_PATH "/Org/Tizen/Resourced/Freezer"
 #define RESOURCED_FREEZER_INTERFACE "org.tizen.resourced.freezer"
 #define RESOURCED_FREEZER_SIGNAL "FreezerState"
+#define SQLITE_FLUSH_MAX (1024 * 1024)
 
 typedef struct _appcore_base_context {
        appcore_base_ops ops;
@@ -971,6 +972,28 @@ EXPORT_API int appcore_base_set_i18n(const char *domain_name, const char *dir_na
        return __set_i18n(domain_name, dir_name);
 }
 
+static void __set_default_events(void)
+{
+       int r;
+
+       vconf_notify_key_changed(VCONFKEY_LANGSET, __on_language_change, NULL);
+       r = vconf_notify_key_changed(VCONFKEY_REGIONFORMAT, __on_region_change, NULL);
+       if (r == 0)
+               vconf_notify_key_changed(VCONFKEY_REGIONFORMAT_TIME1224, __on_region_change, NULL);
+       vconf_notify_key_changed(VCONFKEY_SYSMAN_LOW_MEMORY, __on_low_memory, NULL);
+}
+
+static void __unset_default_events(void)
+{
+       int r;
+
+       vconf_ignore_key_changed(VCONFKEY_LANGSET, __on_language_change);
+       r = vconf_ignore_key_changed(VCONFKEY_REGIONFORMAT, __on_region_change);
+       if (r == 0)
+               vconf_ignore_key_changed(VCONFKEY_REGIONFORMAT_TIME1224, __on_region_change);
+       vconf_ignore_key_changed(VCONFKEY_SYSMAN_LOW_MEMORY, __on_low_memory);
+}
+
 EXPORT_API int appcore_base_init(appcore_base_ops ops, int argc, char **argv, void *data)
 {
        int i;
@@ -1002,6 +1025,7 @@ EXPORT_API int appcore_base_init(appcore_base_ops ops, int argc, char **argv, vo
        }
 
        __verify_language();
+       __set_default_events();
        if (__context.ops.set_i18n)
                __context.ops.set_i18n(__context.data);
 
@@ -1039,6 +1063,8 @@ EXPORT_API void appcore_base_fini(void)
                }
        }
 
+       __unset_default_events();
+
        if (__context.sid) {
                g_source_remove(__context.sid);
                __context.sid = 0;
@@ -1063,6 +1089,13 @@ EXPORT_API void appcore_base_fini(void)
 
 EXPORT_API int appcore_base_flush_memory(void)
 {
+       int (*sqlite3_free_heap_memory)(int);
+
+       sqlite3_free_heap_memory = dlsym(RTLD_DEFAULT,
+                       "sqlite3_release_memory");
+       if (sqlite3_free_heap_memory)
+               sqlite3_free_heap_memory(SQLITE_FLUSH_MAX);
+
        malloc_trim(0);
        return 0;
 }
@@ -1183,28 +1216,13 @@ EXPORT_API int appcore_base_on_terminate()
 
 EXPORT_API void appcore_base_on_set_event(enum appcore_base_event event)
 {
-       int r;
-
        switch (event) {
-       case APPCORE_BASE_EVENT_LOW_MEMORY:
-               vconf_notify_key_changed(VCONFKEY_SYSMAN_LOW_MEMORY, __on_low_memory, NULL);
-               break;
        case APPCORE_BASE_EVENT_LOW_BATTERY:
                vconf_notify_key_changed(VCONFKEY_SYSMAN_BATTERY_STATUS_LOW, __on_low_battery, NULL);
                break;
-       case APPCORE_BASE_EVENT_LANG_CHANGE:
-               vconf_notify_key_changed(VCONFKEY_LANGSET, __on_language_change, NULL);
-               break;
        case APPCORE_BASE_EVENT_DEVICE_ORIENTATION_CHANGED:
                __register_rotation_changed_event();
                break;
-       case APPCORE_BASE_EVENT_REGION_CHANGE:
-               r = vconf_notify_key_changed(VCONFKEY_REGIONFORMAT, __on_region_change, NULL);
-               if (r < 0)
-                       break;
-
-               vconf_notify_key_changed(VCONFKEY_REGIONFORMAT_TIME1224, __on_region_change, NULL);
-               break;
        case APPCORE_BASE_EVENT_SUSPENDED_STATE_CHANGE:
                break;
 
@@ -1216,27 +1234,13 @@ EXPORT_API void appcore_base_on_set_event(enum appcore_base_event event)
 
 EXPORT_API void appcore_base_on_unset_event(enum appcore_base_event event)
 {
-       int r;
-
        switch (event) {
-       case APPCORE_BASE_EVENT_LOW_MEMORY:
-               vconf_ignore_key_changed(VCONFKEY_SYSMAN_LOW_MEMORY, __on_low_memory);
-               break;
        case APPCORE_BASE_EVENT_LOW_BATTERY:
                vconf_ignore_key_changed(VCONFKEY_SYSMAN_BATTERY_STATUS_LOW, __on_low_battery);
                break;
-       case APPCORE_BASE_EVENT_LANG_CHANGE:
-               vconf_ignore_key_changed(VCONFKEY_LANGSET, __on_language_change);
-               break;
        case APPCORE_BASE_EVENT_DEVICE_ORIENTATION_CHANGED:
                __unregister_rotation_changed_event();
                break;
-       case APPCORE_BASE_EVENT_REGION_CHANGE:
-               r = vconf_ignore_key_changed(VCONFKEY_REGIONFORMAT, __on_region_change);
-               if (r < 0)
-                       break;
-               vconf_ignore_key_changed(VCONFKEY_REGIONFORMAT_TIME1224, __on_region_change);
-               break;
        case APPCORE_BASE_EVENT_SUSPENDED_STATE_CHANGE:
                break;
        default:
@@ -1325,6 +1329,16 @@ EXPORT_API void appcore_base_exit(void)
                __context.ops.exit(__context.data);
 }
 
+EXPORT_API void appcore_base_add_suspend_timer(void)
+{
+       __add_suspend_timer();
+}
+
+EXPORT_API void appcore_base_remove_suspend_timer(void)
+{
+       __remove_suspend_timer();
+}
+
 static int __on_receive(aul_type type, bundle *b, void *data)
 {
        return appcore_base_on_receive(type, b);