diff options
| author | CoprDistGit <infra@openeuler.org> | 2025-02-04 07:56:39 +0000 | 
|---|---|---|
| committer | CoprDistGit <infra@openeuler.org> | 2025-02-04 07:56:39 +0000 | 
| commit | 8c1cbe25d38ba9198be10751231aac93089916b1 (patch) | |
| tree | 4946ca8a80bb5839dcd19829c6b3f52dbba753fb | |
| parent | 40c70d2d420426025bf282e2b023b9cb47233ec6 (diff) | |
automatic import of pygobject3openeuler24.03_LTS_SP1openeuler24.03_LTS
| -rw-r--r-- | 0001-revert-override-of-connection.register_object.patch | 140 | ||||
| -rw-r--r-- | 367.patch | 42 | ||||
| -rw-r--r-- | pygobject3.spec | 8 | 
3 files changed, 190 insertions, 0 deletions
diff --git a/0001-revert-override-of-connection.register_object.patch b/0001-revert-override-of-connection.register_object.patch new file mode 100644 index 0000000..d80c18c --- /dev/null +++ b/0001-revert-override-of-connection.register_object.patch @@ -0,0 +1,140 @@ +From e86c32092e693ecffcec211133fd1929603948d1 Mon Sep 17 00:00:00 2001 +From: Adam Williamson <awilliam@redhat.com> +Date: Sat, 30 Nov 2024 14:59:49 -0800 +Subject: [PATCH] revert override of connection.register_object + +This seems to break the exit handler of anaconda (Fedora/RHEL +installer), such that it often fails to exit properly. + +Signed-off-by: Adam Williamson <awilliam@redhat.com> +--- + gi/overrides/Gio.py | 31 ------------------- + tests/test_gdbus.py | 73 --------------------------------------------- + 2 files changed, 104 deletions(-) + +diff --git a/gi/overrides/Gio.py b/gi/overrides/Gio.py +index 48c3737a..45256385 100644 +--- a/gi/overrides/Gio.py ++++ b/gi/overrides/Gio.py +@@ -89,37 +89,6 @@ class DBusArgInfo(Gio.DBusArgInfo): + __all__.append('DBusArgInfo') +  +  +-@override +-class DBusConnection(Gio.DBusConnection): +-    __init__ = _warn_init(Gio.DBusConnection) +- +-    def register_object(self, +-                        object_path, +-                        interface_info, +-                        method_call_closure=None, +-                        get_property_closure=None, +-                        set_property_closure=None): +-        if method_call_closure is not None: +-            def wrapped_method_call_closure(connection, sender, object_path, +-                                            interface_name, method_name, parameters, +-                                            invocation): +-                method_call_closure(connection, sender, object_path, +-                                    interface_name, method_name, parameters, +-                                    invocation) +-                invocation._unref() +-        else: +-            wrapped_method_call_closure = None +- +-        return super().register_object(object_path, +-                                       interface_info, +-                                       wrapped_method_call_closure, +-                                       get_property_closure, +-                                       set_property_closure) +- +- +-__all__.append('DBusConnection') +- +- + @override + class DBusMethodInfo(Gio.DBusMethodInfo): +     __init__ = _warn_init(Gio.DBusMethodInfo) +diff --git a/tests/test_gdbus.py b/tests/test_gdbus.py +index afbf94cb..18fd0e41 100644 +--- a/tests/test_gdbus.py ++++ b/tests/test_gdbus.py +@@ -284,76 +284,3 @@ class TestDBusConnection: +         ): +             reg_id = bus.register_object(**kwargs) +             bus.unregister_object(reg_id) +- +-    @unittest.skipUnless(has_dbus, "no dbus running") +-    def test_connection_invocation_ref_count(self): +-        """Invocation object should not leak a reference.""" +-        invocation, errors = self.run_server(self.client_call) +- +-        assert not errors +-        assert invocation +-        assert invocation.ref_count == 1 +- +-    def run_server(self, client_callback): +-        self.invocation = None +-        self.errors = [] +-        self.loop = GLib.MainLoop() +- +-        def on_name_acquired(bus, name): +-            client_callback(bus) +- +-        self.reg_id = None +-        bus = Gio.bus_get_sync(Gio.BusType.SESSION) +-        owner_id = Gio.bus_own_name(Gio.BusType.SESSION, +-                                    "org.pygobject.Test", +-                                    Gio.BusNameOwnerFlags.NONE, +-                                    self.on_bus_acquired, +-                                    on_name_acquired, +-                                    self.on_name_lost) +-        try: +-            self.loop.run() +-        finally: +-            Gio.bus_unown_name(owner_id) +-            if self.reg_id: +-                bus.unregister_object(self.reg_id) +- +-        return (self.invocation, self.errors) +- +-    def on_name_lost(self, _bus, name): +-        self.errors.append(f"Name {name} lost") +-        self.loop.quit() +- +-    def on_bus_acquired(self, bus, name): +-        interface_xml = """ +-            <node> +-                <interface name='org.pygobject.Test'> +-                    <method name='test' /> +-                </interface> +-            </node>""" +-        self.reg_id = bus.register_object("/pygobject/Test", +-                                          Gio.DBusNodeInfo.new_for_xml(interface_xml).interfaces[0], +-                                          self.on_incoming_method_call, +-                                          None, +-                                          None) +- +-    def on_incoming_method_call(self, bus, sender, object_path, interface_name, method_name, parameters, invocation): +-        invocation.return_value(GLib.Variant("()", ())) +-        self.invocation = invocation +- +-    def client_call(self, bus): +- +-        def call_done(obj, result): +-            try: +-                obj.call_finish(result) +-            finally: +-                self.loop.quit() +- +-        bus.call("org.pygobject.Test", +-                 "/pygobject/Test", +-                 "org.pygobject.Test", +-                 "test", +-                 parameters=None, +-                 reply_type=None, +-                 flags=Gio.DBusCallFlags.NONE, +-                 timeout_msec=5000, +-                 callback=call_done) +--  +2.47.0 + diff --git a/367.patch b/367.patch new file mode 100644 index 0000000..8306c6f --- /dev/null +++ b/367.patch @@ -0,0 +1,42 @@ +From a2445df58a712980ccd0c21d75a631c6bda89b2b Mon Sep 17 00:00:00 2001 +From: Simon McVittie <smcv@debian.org> +Date: Wed, 23 Oct 2024 12:01:24 +0100 +Subject: [PATCH] async: Use correct T_BOOL type for _asyncio_future_blocking + +Declaring a PyMemberDef with type T_BOOL requires the corresponding C +type to be char, with value 0 or 1: when the member is read, CPython +will effectively be dereferencing +`* (char *) &pygiasync._asyncio_future_blocking`. + +On little-endian architectures, in practice this worked, because the +low-order bits of an int are in the first byte, which would take value +0 or 1 as desired, with all other bits zero. However, on big-endian +architectures, the low-order bits of an int are in the last byte, so +reading the _asyncio_future_blocking attribute from Python code would +in practice always produce 0, even when the int field had been set to 1 +from C code. + +Reference: https://docs.python.org/3/c-api/structures.html#member-types +Resolves: https://gitlab.gnome.org/GNOME/pygobject/-/issues/650 +Bug-Debian: https://bugs.debian.org/1085891 +Signed-off-by: Simon McVittie <smcv@debian.org> +--- + gi/pygi-async.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/gi/pygi-async.h b/gi/pygi-async.h +index d5e7a92a7..341d62377 100644 +--- a/gi/pygi-async.h ++++ b/gi/pygi-async.h +@@ -37,7 +37,7 @@ typedef struct { +     PyGICallableInfo *finish_func; +     PyObject *loop; +     PyObject *cancellable; +-    int _asyncio_future_blocking; ++    char _asyncio_future_blocking; +     PyObject *result; +     PyObject *exception; +  +--  +GitLab + diff --git a/pygobject3.spec b/pygobject3.spec index 2df701f..803412d 100644 --- a/pygobject3.spec +++ b/pygobject3.spec @@ -12,6 +12,14 @@ Source0:         https://download.gnome.org/sources/pygobject/3.50/pygobject-%{v  # Drop GIMarshallingTests - It's test suite remainders that should not be installed  Patch0:          pygobject-do-not-install-GIMarshallingTests.patch +# async: Use correct T_BOOL type for _asyncio_future_blocking (merged upstream) +# Fixes failures on s390x +Patch1:         https://gitlab.gnome.org/GNOME/pygobject/-/merge_requests/367.patch +# https://bugzilla.redhat.com/show_bug.cgi?id=2329587 +# https://gitlab.gnome.org/GNOME/pygobject/-/issues/658 +# Revert override of connection.register_object to avoid breaking anaconda +Patch2:         0001-revert-override-of-connection.register_object.patch +  BuildRequires: meson >= 0.64.0  BuildRequires: pkgconfig(cairo)  BuildRequires: pkgconfig(cairo-gobject)  | 
