From c5ac3629c9af092c11da0ac06c37af466f65dba2 Mon Sep 17 00:00:00 2001 From: Vivien Kraus Date: Thu, 11 Nov 2021 15:45:04 +0000 Subject: Client API: use custom vala code to register the destructor --- src/client/Disfluid-0.h | 2 +- src/client/Makefile.am | 6 +++--- src/client/disfluid-0-custom.vala | 21 +++++++++++++++++++++ src/client/libwebidoidc-client.c | 5 ++++- 4 files changed, 29 insertions(+), 5 deletions(-) create mode 100644 src/client/disfluid-0-custom.vala diff --git a/src/client/Disfluid-0.h b/src/client/Disfluid-0.h index 05ce0c4..1344836 100644 --- a/src/client/Disfluid-0.h +++ b/src/client/Disfluid-0.h @@ -51,7 +51,7 @@ typedef void *(*DisfluidUser) (const DisfluidApi * api, void *data); void *disfluid_api_init (DisfluidUser func, void *data); /** - * DisfluidClient: (unref-func disfluid_client_free): + * DisfluidClient: * * A client contains a client ID, redirection URI and an associated * key pair. diff --git a/src/client/Makefile.am b/src/client/Makefile.am index aad9fbc..f447adf 100644 --- a/src/client/Makefile.am +++ b/src/client/Makefile.am @@ -36,7 +36,7 @@ vapidir = $(datadir)/vala/vapi dist_vapi_DATA = %reldir%/disfluid-0.vapi -EXTRA_DIST += %reldir%/Disfluid-0.metadata +EXTRA_DIST += %reldir%/Disfluid-0.metadata %reldir%/disfluid-0-custom.vala CLEANFILES += %reldir%/vapi-generation @@ -48,10 +48,10 @@ CLEANFILES += %reldir%/vapi-generation $(AM_V_GEN) $(G_IR_COMPILER) -o $@-t --shared-library=libwebidoidc $(srcdir)/$< @mv $@-t $(srcdir)/$@ -%reldir%/disfluid-0.vapi: %reldir%/Disfluid-0.gir %reldir%/Disfluid-0.metadata +%reldir%/disfluid-0.vapi: %reldir%/Disfluid-0.gir %reldir%/Disfluid-0.metadata %reldir%/disfluid-0-custom.vala @rm -rf %reldir%/vapi-generation @mkdir %reldir%/vapi-generation - $(AM_V_GEN) $(VAPIGEN) --library disfluid-0 -d %reldir%/vapi-generation $(srcdir)/$< --metadatadir=$(srcdir)/%reldir% + $(AM_V_GEN) $(VAPIGEN) --library disfluid-0 -d %reldir%/vapi-generation $(srcdir)/$< --metadatadir=$(srcdir)/%reldir% $(srcdir)/%reldir%/disfluid-0-custom.vala @mv %reldir%/vapi-generation/disfluid-0.vapi $@-t @rmdir %reldir%/vapi-generation @mv $@-t $(srcdir)/$@ diff --git a/src/client/disfluid-0-custom.vala b/src/client/disfluid-0-custom.vala new file mode 100644 index 0000000..295c67c --- /dev/null +++ b/src/client/disfluid-0-custom.vala @@ -0,0 +1,21 @@ +// disfluid, implementation of the Solid specification +// Copyright (C) 2021 Vivien Kraus + +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. + +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +namespace Disfluid { + [CCode (free_function = "disfluid_client_free")] + [Compact] + public class Client { } +} \ No newline at end of file diff --git a/src/client/libwebidoidc-client.c b/src/client/libwebidoidc-client.c index 836ff69..fbe2343 100644 --- a/src/client/libwebidoidc-client.c +++ b/src/client/libwebidoidc-client.c @@ -88,7 +88,10 @@ disfluid_client_make (const struct DisfluidApi *api, void disfluid_client_free (struct DisfluidClient *client) { - scm_gc_unprotect_object (client->object); + if (client) + { + scm_gc_unprotect_object (client->object); + } free (client); } -- cgit v1.2.3