NetworkManager/examples
Thomas Haller 88724ff169
libnm: add nm_client_wait_shutdown() function for cleaning up NMClient
Add a fire-and-forget function to wait for shutdown to be complete.

It's not entirely trivial to ensure all resources of NMClient are
cleaned up. That matters only if NMClient uses a temporary GMainContext
that the user wants to release while the application continues. For
example, to do some short-lived operations an a worker thread. It's
not trivial also because glib provides no convenient API to integrate
a GMainContext in another GMainContext. We have that code as
nm_utils_g_main_context_create_integrate_source(), so add a helper
function to allow the user to do this.

The function allows to omit the callback, in which case the caller
wouldn't know when shutdown is complete. That would still be useful
however, when integrating the client's context into the caller's
context, so that the client's context gets automatically iterated
until completion.

The following test script will run out of file descriptors,
when wait_shutdown() is not used:

   #!/bin/python

   import gi

   gi.require_version("NM", "1.0")
   from gi.repository import NM, GLib

   for i in range(1200):
       print(f">>>{i}")

       ctx = GLib.MainContext()
       ctx.push_thread_default()
       nmc = NM.Client.new()
       ctx.pop_thread_default()

       def cb(unused, result, i):
           try:
               NM.Client.wait_shutdown_finish(result)
           except Exception:
               # cannot happen
               assert False
           else:
               print(f">>>>> {i} complete")

       nmc.wait_shutdown(True, None, cb, i)

       while GLib.MainContext.default().iteration(False):
           pass
2022-10-14 17:48:24 +02:00
..
C example: Match more AP security 2021-12-10 16:49:51 +01:00
dispatcher dispatcher: avoid "dirname" and "basename" calls in "10-ifcfg-rh-routes.sh" script 2019-10-04 12:38:16 +02:00
js all: update deprecated SPDX license identifiers 2021-01-05 09:46:21 +01:00
lua/lgi all: update deprecated SPDX license identifiers 2021-01-05 09:46:21 +01:00
nm-conf.d examples: reword comments in "30-anon.conf" snippet 2022-05-27 15:05:03 +02:00
python libnm: add nm_client_wait_shutdown() function for cleaning up NMClient 2022-10-14 17:48:24 +02:00
ruby docs: update URL for latest online documentation 2021-09-24 14:41:35 +02:00
shell all: update deprecated SPDX license identifiers 2021-01-05 09:46:21 +01:00