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

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

 



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.




[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