Re: [PATCH BlueZ] test/example-advertisement: add shutdown code

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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.Properties");
        +                                   "org.freedesktop.DBus.Properties")
         
             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_advertisement)
        +
         
         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
        
        
    
    





[Index of Archives]     [Bluez Devel]     [Linux Wireless Networking]     [Linux Wireless Personal Area Networking]     [Linux ATH6KL]     [Linux USB Devel]     [Linux Media Drivers]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux