diff options
author | Milan Crha <mcrha@redhat.com> | 2023-01-18 17:30:40 +0100 |
---|---|---|
committer | Milan Crha <mcrha@redhat.com> | 2023-01-18 17:30:40 +0100 |
commit | df4ef1432576132ac9039679a58dd814102c0bf2 (patch) | |
tree | 1b5f1fceec01a01b7f79013b9cc701972170bf0d /src | |
parent | 4b20b265bb433d83d434280e86fbbdfa5950e76d (diff) | |
download | evolution-data-server-df4ef1432576132ac9039679a58dd814102c0bf2.tar.gz |
I#231 - Release unused memory in factories after certain operations
Closes https://gitlab.gnome.org/GNOME/evolution-data-server/-/issues/231
Diffstat (limited to 'src')
-rw-r--r-- | src/addressbook/libedata-book/e-book-backend.c | 8 | ||||
-rw-r--r-- | src/addressbook/libedata-book/e-data-book-view.c | 2 | ||||
-rw-r--r-- | src/calendar/libedata-cal/e-cal-backend.c | 8 | ||||
-rw-r--r-- | src/calendar/libedata-cal/e-data-cal-view.c | 2 | ||||
-rw-r--r-- | src/libedataserver/e-data-server-util.c | 23 | ||||
-rw-r--r-- | src/libedataserver/e-data-server-util.h | 1 |
6 files changed, 44 insertions, 0 deletions
diff --git a/src/addressbook/libedata-book/e-book-backend.c b/src/addressbook/libedata-book/e-book-backend.c index cde26456e..aaa08822c 100644 --- a/src/addressbook/libedata-book/e-book-backend.c +++ b/src/addressbook/libedata-book/e-book-backend.c @@ -552,6 +552,8 @@ book_backend_finalize (GObject *object) /* Chain up to parent's finalize() method. */ G_OBJECT_CLASS (e_book_backend_parent_class)->finalize (object); + + e_util_call_malloc_trim (); } static void @@ -693,6 +695,8 @@ book_backend_shutdown (EBookBackend *backend) "The %s instance for \"%s\" is shutting down.\n", G_OBJECT_TYPE_NAME (backend), e_source_get_display_name (source)); + + e_util_call_malloc_trim (); } static void @@ -2778,6 +2782,8 @@ e_book_backend_start_view (EBookBackend *backend, g_return_if_fail (class->impl_start_view); class->impl_start_view (backend, view); + + e_util_call_malloc_trim (); } /** @@ -2801,6 +2807,8 @@ e_book_backend_stop_view (EBookBackend *backend, g_return_if_fail (class->impl_stop_view != NULL); class->impl_stop_view (backend, view); + + e_util_call_malloc_trim (); } /** diff --git a/src/addressbook/libedata-book/e-data-book-view.c b/src/addressbook/libedata-book/e-data-book-view.c index e16c27526..911a56356 100644 --- a/src/addressbook/libedata-book/e-data-book-view.c +++ b/src/addressbook/libedata-book/e-data-book-view.c @@ -1179,6 +1179,8 @@ e_data_book_view_notify_complete (EDataBookView *view, g_free (error_name); g_free (error_message); + + e_util_call_malloc_trim (); } /** diff --git a/src/calendar/libedata-cal/e-cal-backend.c b/src/calendar/libedata-cal/e-cal-backend.c index 5eda277e9..eb2a3dff5 100644 --- a/src/calendar/libedata-cal/e-cal-backend.c +++ b/src/calendar/libedata-cal/e-cal-backend.c @@ -910,6 +910,8 @@ cal_backend_finalize (GObject *object) /* Chain up to parent's finalize() method. */ G_OBJECT_CLASS (e_cal_backend_parent_class)->finalize (object); + + e_util_call_malloc_trim (); } static void @@ -998,6 +1000,8 @@ cal_backend_shutdown (ECalBackend *backend) "The %s instance for \"%s\" is shutting down.\n", G_OBJECT_TYPE_NAME (backend), e_source_get_display_name (source)); + + e_util_call_malloc_trim (); } /* Private function, not meant to be part of the public API */ @@ -4672,6 +4676,8 @@ e_cal_backend_start_view (ECalBackend *backend, g_return_if_fail (klass->impl_start_view != NULL); klass->impl_start_view (backend, view); + + e_util_call_malloc_trim (); } /** @@ -4698,6 +4704,8 @@ e_cal_backend_stop_view (ECalBackend *backend, /* backward compatibility, do not force each backend define this function */ if (klass->impl_stop_view) klass->impl_stop_view (backend, view); + + e_util_call_malloc_trim (); } /** diff --git a/src/calendar/libedata-cal/e-data-cal-view.c b/src/calendar/libedata-cal/e-data-cal-view.c index bd63317ea..570d14b8e 100644 --- a/src/calendar/libedata-cal/e-data-cal-view.c +++ b/src/calendar/libedata-cal/e-data-cal-view.c @@ -1468,5 +1468,7 @@ e_data_cal_view_notify_complete (EDataCalView *view, g_free (error_message); g_mutex_unlock (&view->priv->pending_mutex); + + e_util_call_malloc_trim (); } diff --git a/src/libedataserver/e-data-server-util.c b/src/libedataserver/e-data-server-util.c index b938f1752..e3d085993 100644 --- a/src/libedataserver/e-data-server-util.c +++ b/src/libedataserver/e-data-server-util.c @@ -21,6 +21,10 @@ #include "evolution-data-server-config.h" +#ifdef HAVE_MALLOC_TRIM +#include <malloc.h> +#endif + #include <string.h> #include <sys/stat.h> #include <time.h> @@ -3060,3 +3064,22 @@ e_util_change_uri_port (GUri **inout_uri, g_uri_unref (*inout_uri); *inout_uri = tmp; } + +/** + * e_util_call_malloc_trim: (skip) + * + * Calls malloc_trim() to free unused heap memory. The function + * does nothing, when the malloc_trim() is not available. + * + * This might be called after some operations which may use a lot + * of memory temporarily. + * + * Since: 3.48 + **/ +void +e_util_call_malloc_trim (void) +{ +#ifdef HAVE_MALLOC_TRIM + malloc_trim (0); +#endif +} diff --git a/src/libedataserver/e-data-server-util.h b/src/libedataserver/e-data-server-util.h index b9fc1ddb0..c1d3e9163 100644 --- a/src/libedataserver/e-data-server-util.h +++ b/src/libedataserver/e-data-server-util.h @@ -262,6 +262,7 @@ void e_util_change_uri_component (GUri **inout_uri, const gchar *value); void e_util_change_uri_port (GUri **inout_uri, gint port); +void e_util_call_malloc_trim (void); G_END_DECLS |