Hi Preston, On Fri, 2019-02-22 at 22:42 +0000, Hunt, Preston wrote: > Hello, > > I just realized that this patch which I had submitted many months ago > never got applied to the master branch. I was wondering if it slipped > through the cracks or if there was an issue with it, in which case I > am happy to address any concerns. Thank you! > > With best regards, > Preston > > > On 9/24/18, 8:46 AM, "Hunt, Preston" <preston.hunt@xxxxxxxxx> > wrote: > > The previous sample code did not release all resources when > shutting > down. This is fine when it's a standalone program since > Python will free > all resources automatically when the process terminates. > However, in a > long-running process, this will eventually cause problems. > > This changeset shows how to properly release all resources, > if an optional > command line "--timeout" argument is used. The default is no > timeout to > maintain behavior of the previous implementation > (advertisements will run > forever). > --- > test/example-advertisement | 42 > ++++++++++++++++++++++++++++++++---------- > 1 file changed, 32 insertions(+), 10 deletions(-) > > diff --git a/test/example-advertisement b/test/example- > advertisement > index fd84eac..88a27ab 100755 > --- a/test/example-advertisement > +++ b/test/example-advertisement > @@ -2,19 +2,18 @@ > > from __future__ import print_function > > +import argparse > import dbus > import dbus.exceptions > import dbus.mainloop.glib > import dbus.service > - > -import array > +import time > +import threading > > try: > - from gi.repository import GObject # python3 > + from gi.repository import GObject # python3 > except ImportError: > - import gobject as GObject # python2 > - > -from random import randint > + import gobject as GObject # python2 > > mainloop = None > > @@ -136,6 +135,7 @@ class Advertisement(dbus.service.Object): > def Release(self): > print('%s: Released!' % self.path) > > + > class TestAdvertisement(Advertisement): > > def __init__(self, bus, index): > @@ -170,7 +170,13 @@ def find_adapter(bus): > return None > > > -def main(): > +def shutdown(timeout): > + print('Advertising for {} seconds...'.format(timeout)) > + time.sleep(timeout) > + mainloop.quit() > + > + > +def main(timeout=0): > global mainloop > > dbus.mainloop.glib.DBusGMainLoop(set_as_default=True) > @@ -183,7 +189,7 @@ def main(): > return > > adapter_props = > dbus.Interface(bus.get_object(BLUEZ_SERVICE_NAME, adapter), > - "org.freedesktop.DBus.Pro > perties"); > + "org.freedesktop.DBus.Pro > perties") > > adapter_props.Set("org.bluez.Adapter1", "Powered", > dbus.Boolean(1)) > > @@ -198,7 +204,23 @@ def main(): > reply_handler=register_ > ad_cb, > error_handler=register_ > ad_error_cb) > > - mainloop.run() > + if timeout > 0: > + threading.Thread(target=shutdown, > args=(timeout,)).start() > + else: > + print('Advertising forever...') > + > + mainloop.run() # blocks until mainloop.quit() is called > + > + ad_manager.UnregisterAdvertisement(test_advertisement) > + print('Advertisement unregistered') > + dbus.service.Object.remove_from_connection(test_advertis > ement) > + > > if __name__ == '__main__': > - main() > + parser = argparse.ArgumentParser() > + parser.add_argument('--timeout', default=0, type=int, > help="advertise " + > + "for this many seconds then stop, > 0=run forever " + > + "(default: 0)") > + args = parser.parse_args() > + > + main(args.timeout) > -- > 2.7.4 Applied, thanks.