All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH BlueZ] test/example-advertisement: add shutdown code
@ 2018-09-21 16:53 Hunt, Preston
  2018-09-21 18:47 ` Luiz Augusto von Dentz
  0 siblings, 1 reply; 9+ messages in thread
From: Hunt, Preston @ 2018-09-21 16:53 UTC (permalink / raw)
  To: linux-bluetooth

VGhlIHByZXZpb3VzIHNhbXBsZSBjb2RlIGRpZCBub3QgcmVsZWFzZSBhbGwgcmVzb3VyY2VzIHdo
ZW4gc2h1dHRpbmcNCmRvd24uIFRoaXMgaXMgZmluZSB3aGVuIGl0J3MgYSBzdGFuZGFsb25lIHBy
b2dyYW0gc2luY2UgUHl0aG9uIHdpbGwgZnJlZQ0KYWxsIHJlc291cmNlcyBhdXRvbWF0aWNhbGx5
IHdoZW4gdGhlIHByb2Nlc3MgdGVybWluYXRlcy4gSG93ZXZlciwgaW4gYQ0KbG9uZy1ydW5uaW5n
IHByb2Nlc3MsIHRoaXMgd2lsbCBldmVudHVhbGx5IGNhdXNlIHByb2JsZW1zLg0KDQpUaGlzIGNo
YW5nZXNldCBzaG93cyBob3cgdG8gcHJvcGVybHkgcmVsZWFzZSBhbGwgcmVzb3VyY2VzLiBBbiBv
cHRpb25hbA0KY29tbWFuZC1saW5lIHRpbWVvdXQgYXJndW1lbnQgY29udHJvbHMgdGhlIGR1cmF0
aW9uIChpZiBhbnkpLg0KLS0tDQogdGVzdC9leGFtcGxlLWFkdmVydGlzZW1lbnQgfCA0MCArKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tDQogMSBmaWxlIGNoYW5nZWQsIDMx
IGluc2VydGlvbnMoKyksIDkgZGVsZXRpb25zKC0pDQoNCmRpZmYgLS1naXQgYS90ZXN0L2V4YW1w
bGUtYWR2ZXJ0aXNlbWVudCBiL3Rlc3QvZXhhbXBsZS1hZHZlcnRpc2VtZW50DQppbmRleCBmZDg0
ZWFjLi4zZDc4NzNlIDEwMDc1NQ0KLS0tIGEvdGVzdC9leGFtcGxlLWFkdmVydGlzZW1lbnQNCisr
KyBiL3Rlc3QvZXhhbXBsZS1hZHZlcnRpc2VtZW50DQpAQCAtMiwxOSArMiwxOCBAQA0KIA0KIGZy
b20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24NCiANCitpbXBvcnQgYXJncGFyc2UN
CiBpbXBvcnQgZGJ1cw0KIGltcG9ydCBkYnVzLmV4Y2VwdGlvbnMNCiBpbXBvcnQgZGJ1cy5tYWlu
bG9vcC5nbGliDQogaW1wb3J0IGRidXMuc2VydmljZQ0KLQ0KLWltcG9ydCBhcnJheQ0KK2ltcG9y
dCB0aW1lDQoraW1wb3J0IHRocmVhZGluZw0KIA0KIHRyeToNCi0gIGZyb20gZ2kucmVwb3NpdG9y
eSBpbXBvcnQgR09iamVjdCAgIyBweXRob24zDQorICAgIGZyb20gZ2kucmVwb3NpdG9yeSBpbXBv
cnQgR09iamVjdCAgIyBweXRob24zDQogZXhjZXB0IEltcG9ydEVycm9yOg0KLSAgaW1wb3J0IGdv
YmplY3QgYXMgR09iamVjdCAgIyBweXRob24yDQotDQotZnJvbSByYW5kb20gaW1wb3J0IHJhbmRp
bnQNCisgICAgaW1wb3J0IGdvYmplY3QgYXMgR09iamVjdCAgIyBweXRob24yDQogDQogbWFpbmxv
b3AgPSBOb25lDQogDQpAQCAtMTM2LDYgKzEzNSw3IEBAIGNsYXNzIEFkdmVydGlzZW1lbnQoZGJ1
cy5zZXJ2aWNlLk9iamVjdCk6DQogICAgIGRlZiBSZWxlYXNlKHNlbGYpOg0KICAgICAgICAgcHJp
bnQoJyVzOiBSZWxlYXNlZCEnICUgc2VsZi5wYXRoKQ0KIA0KKw0KIGNsYXNzIFRlc3RBZHZlcnRp
c2VtZW50KEFkdmVydGlzZW1lbnQpOg0KIA0KICAgICBkZWYgX19pbml0X18oc2VsZiwgYnVzLCBp
bmRleCk6DQpAQCAtMTcwLDcgKzE3MCwxNiBAQCBkZWYgZmluZF9hZGFwdGVyKGJ1cyk6DQogICAg
IHJldHVybiBOb25lDQogDQogDQotZGVmIG1haW4oKToNCitkZWYgc2h1dGRvd24odGltZW91dCk6
DQorICAgIGlmIHRpbWVvdXQgPT0gMDoNCisgICAgICAgIHByaW50KCdBZHZlcnRpc2luZyBmb3Jl
dmVyLi4uJykNCisgICAgICAgIHJldHVybg0KKyAgICBwcmludCgnQWR2ZXJ0aXNpbmcgZm9yIHt9
IHNlY29uZHMuLi4nLmZvcm1hdCh0aW1lb3V0KSkNCisgICAgdGltZS5zbGVlcCh0aW1lb3V0KQ0K
KyAgICBtYWlubG9vcC5xdWl0KCkNCisNCisNCitkZWYgbWFpbih0aW1lb3V0KToNCiAgICAgZ2xv
YmFsIG1haW5sb29wDQogDQogICAgIGRidXMubWFpbmxvb3AuZ2xpYi5EQnVzR01haW5Mb29wKHNl
dF9hc19kZWZhdWx0PVRydWUpDQpAQCAtMTgzLDcgKzE5Miw3IEBAIGRlZiBtYWluKCk6DQogICAg
ICAgICByZXR1cm4NCiANCiAgICAgYWRhcHRlcl9wcm9wcyA9IGRidXMuSW50ZXJmYWNlKGJ1cy5n
ZXRfb2JqZWN0KEJMVUVaX1NFUlZJQ0VfTkFNRSwgYWRhcHRlciksDQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAib3JnLmZyZWVkZXNrdG9wLkRCdXMuUHJvcGVydGllcyIpOw0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9yZy5mcmVlZGVza3RvcC5EQnVz
LlByb3BlcnRpZXMiKQ0KIA0KICAgICBhZGFwdGVyX3Byb3BzLlNldCgib3JnLmJsdWV6LkFkYXB0
ZXIxIiwgIlBvd2VyZWQiLCBkYnVzLkJvb2xlYW4oMSkpDQogDQpAQCAtMTk4LDcgKzIwNywyMCBA
QCBkZWYgbWFpbigpOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBs
eV9oYW5kbGVyPXJlZ2lzdGVyX2FkX2NiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBlcnJvcl9oYW5kbGVyPXJlZ2lzdGVyX2FkX2Vycm9yX2NiKQ0KIA0KKyAgICB0aHJl
YWRpbmcuVGhyZWFkKHRhcmdldD1zaHV0ZG93biwgYXJncz0odGltZW91dCwpKS5zdGFydCgpDQor
DQogICAgIG1haW5sb29wLnJ1bigpDQogDQorICAgIGFkX21hbmFnZXIuVW5yZWdpc3RlckFkdmVy
dGlzZW1lbnQodGVzdF9hZHZlcnRpc2VtZW50KQ0KKyAgICBwcmludCgnQWR2ZXJ0aXNlbWVudCB1
bnJlZ2lzdGVyZWQnKQ0KKyAgICBkYnVzLnNlcnZpY2UuT2JqZWN0LnJlbW92ZV9mcm9tX2Nvbm5l
Y3Rpb24odGVzdF9hZHZlcnRpc2VtZW50KQ0KKw0KKw0KIGlmIF9fbmFtZV9fID09ICdfX21haW5f
Xyc6DQotICAgIG1haW4oKQ0KKyAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigp
DQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tdGltZW91dCcsIGRlZmF1bHQ9MTAsIHR5cGU9
aW50LCBoZWxwPSJhZHZlcnRpc2UgIiArDQorICAgICAgICAgICAgICAgICAgICAgICAgImZvciB0
aGlzIG1hbnkgc2Vjb25kcyB0aGVuIHN0b3AsIDA9cnVuIGZvcmV2ZXIgIiArDQorICAgICAgICAg
ICAgICAgICAgICAgICAgIihkZWZhdWx0OiAxMCkiKQ0KKyAgICBhcmdzID0gcGFyc2VyLnBhcnNl
X2FyZ3MoKQ0KKw0KKyAgICBtYWluKGFyZ3MudGltZW91dCkNCi0tIA0KMi43LjQNCg0KDQo=

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH BlueZ] test/example-advertisement: add shutdown code
  2018-09-21 16:53 [PATCH BlueZ] test/example-advertisement: add shutdown code Hunt, Preston
@ 2018-09-21 18:47 ` Luiz Augusto von Dentz
  2018-09-21 21:37   ` Hunt, Preston
  0 siblings, 1 reply; 9+ messages in thread
From: Luiz Augusto von Dentz @ 2018-09-21 18:47 UTC (permalink / raw)
  To: Hunt, Preston; +Cc: linux-bluetooth

Hi Preston,

On Fri, Sep 21, 2018 at 7:53 PM, Hunt, Preston <preston.hunt@intel.com> 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. An optional
> command-line timeout argument controls the duration (if any).
> ---
>  test/example-advertisement | 40 +++++++++++++++++++++++++++++++---------
>  1 file changed, 31 insertions(+), 9 deletions(-)
>
> diff --git a/test/example-advertisement b/test/example-advertisement
> index fd84eac..3d7873e 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,16 @@ def find_adapter(bus):
>      return None
>
>
> -def main():
> +def shutdown(timeout):
> +    if timeout == 0:
> +        print('Advertising forever...')
> +        return
> +    print('Advertising for {} seconds...'.format(timeout))
> +    time.sleep(timeout)
> +    mainloop.quit()
> +
> +
> +def main(timeout):
>      global mainloop
>
>      dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
> @@ -183,7 +192,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 +207,20 @@ def main():
>                                       reply_handler=register_ad_cb,
>                                       error_handler=register_ad_error_cb)
>
> +    threading.Thread(target=shutdown, args=(timeout,)).start()
> +
>      mainloop.run()
>
> +    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=10, type=int, help="advertise " +
> +                        "for this many seconds then stop, 0=run forever " +
> +                        "(default: 10)")

Lets default to 0 so we maintain the same behavior as before.

> +    args = parser.parse_args()
> +
> +    main(args.timeout)
> --
> 2.7.4
>
>



-- 
Luiz Augusto von Dentz

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH BlueZ] test/example-advertisement: add shutdown code
  2018-09-21 18:47 ` Luiz Augusto von Dentz
@ 2018-09-21 21:37   ` Hunt, Preston
  2018-09-24 15:46     ` Hunt, Preston
  0 siblings, 1 reply; 9+ messages in thread
From: Hunt, Preston @ 2018-09-21 21:37 UTC (permalink / raw)
  To: Luiz Augusto von Dentz; +Cc: linux-bluetooth

SGkgTHVpeiwNCg0KPiAgICBMZXRzIGRlZmF1bHQgdG8gMCBzbyB3ZSBtYWludGFpbiB0aGUgc2Ft
ZSBiZWhhdmlvciBhcyBiZWZvcmUuDQogICAgDQpTdXJlLCB0aGF0IG1ha2VzIHNlbnNlLiBJJ2xs
IGRvIHRoYXQgYW5kIHNlbmQgb3V0IGEgbmV3IHBhdGNoIHNob3J0bHkuDQoNClRoYW5rcywNClBy
ZXN0b24NCg0K

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PATCH BlueZ] test/example-advertisement: add shutdown code
  2018-09-21 21:37   ` Hunt, Preston
@ 2018-09-24 15:46     ` Hunt, Preston
       [not found]       ` <203CC3D6-8987-4F56-AE91-2FD642E29FDB@intel.com>
  0 siblings, 1 reply; 9+ messages in thread
From: Hunt, Preston @ 2018-09-24 15:46 UTC (permalink / raw)
  To: linux-bluetooth

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


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [PATCH BlueZ] test/example-advertisement: add shutdown code
       [not found]       ` <203CC3D6-8987-4F56-AE91-2FD642E29FDB@intel.com>
@ 2019-02-22 22:42         ` Hunt, Preston
  2019-02-26  9:34           ` Luiz Augusto Von Dentz
  0 siblings, 1 reply; 9+ messages in thread
From: Hunt, Preston @ 2019-02-22 22:42 UTC (permalink / raw)
  To: linux-bluetooth

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@intel.com> 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
        
        
    
    


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH BlueZ] test/example-advertisement: add shutdown code
  2019-02-22 22:42         ` Hunt, Preston
@ 2019-02-26  9:34           ` Luiz Augusto Von Dentz
  0 siblings, 0 replies; 9+ messages in thread
From: Luiz Augusto Von Dentz @ 2019-02-26  9:34 UTC (permalink / raw)
  To: Hunt, Preston, linux-bluetooth

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@intel.com>
> 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.


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH BlueZ] test/example-advertisement: add shutdown code
  2018-09-17 13:13 ` Luiz Augusto von Dentz
@ 2018-09-21 16:50   ` Hunt, Preston
  0 siblings, 0 replies; 9+ messages in thread
From: Hunt, Preston @ 2018-09-21 16:50 UTC (permalink / raw)
  To: Luiz Augusto von Dentz; +Cc: linux-bluetooth

VGhhbmtzIEx1aXogZm9yIHRoZSBmZWVkYmFjayEgSSB3aWxsIHN1Ym1pdCBhIG5ldyBwYXRjaCBz
aG9ydGx5IHdpdGggdGhlIHByb3Bvc2VkIGNoYW5nZXMsIGUuZy4sIGFkZGl0aW9uIG9mIGFuIG9w
dGlvbmFsIC0tdGltZW91dCBhcmd1bWVudCB3aGljaCB3aWxsIHNwZWNpZnkgdGhlIHRpbWVvdXQg
ZHVyYXRpb24uDQoNCldpdGggYmVzdCByZWdhcmRzLA0KLVByZXN0b24NCiANCg0K77u/T24gOS8x
Ny8xOCwgNjoxNCBBTSwgIkx1aXogQXVndXN0byB2b24gRGVudHoiIDxsdWl6LmRlbnR6QGdtYWls
LmNvbT4gd3JvdGU6DQoNCiAgICBIaSBQcmVzdG9uLA0KICAgIA0KICAgIE9uIFdlZCwgU2VwIDEy
LCAyMDE4IGF0IDU6NTcgUE0sIEh1bnQsIFByZXN0b24gPHByZXN0b24uaHVudEBpbnRlbC5jb20+
IHdyb3RlOg0KICAgID4gVGhlIHByZXZpb3VzIHNhbXBsZSBjb2RlIGRpZCBub3QgcmVsZWFzZSBh
bGwgcmVzb3VyY2VzIHdoZW4gc2h1dHRpbmcNCiAgICA+IGRvd24uIFRoaXMgaXMgZmluZSB3aGVu
IGl0J3MgYSBzdGFuZGFsb25lIHByb2dyYW0gc2luY2UgUHl0aG9uIHdpbGwgZnJlZQ0KICAgID4g
YWxsIHJlc291cmNlcyBhdXRvbWF0aWNhbGx5IHdoZW4gdGhlIHByb2Nlc3MgdGVybWluYXRlcy4g
SG93ZXZlciwgaW4gYQ0KICAgID4gbG9uZy1ydW5uaW5nIHByb2Nlc3MsIHRoaXMgd2lsbCBldmVu
dHVhbGx5IGNhdXNlIHByb2JsZW1zLg0KICAgIA0KICAgIEkgd291bGQgYWRkIHRoZSB0aW1lb3V0
IGFzIGFyZ3VtZW50IHRvIHRoZSB0b29sIGUuZy4NCiAgICBleGFtcGxlLWFkdmVydGlzZW1lbnQg
LS10aW1lb3V0PTEwDQogICAgDQogICAgPg0KICAgID4gVGhpcyBjaGFuZ2VzZXQgc2hvd3MgaG93
IHRvIHByb3Blcmx5IHJlbGVhc2UgYWxsIHJlc291cmNlcy4NCiAgICA+IC0tLQ0KICAgID4gIHRl
c3QvZXhhbXBsZS1hZHZlcnRpc2VtZW50IHwgMjUgKysrKysrKysrKysrKysrKysrLS0tLS0tLQ0K
ICAgID4gIDEgZmlsZSBjaGFuZ2VkLCAxOCBpbnNlcnRpb25zKCspLCA3IGRlbGV0aW9ucygtKQ0K
ICAgID4NCiAgICA+IGRpZmYgLS1naXQgYS90ZXN0L2V4YW1wbGUtYWR2ZXJ0aXNlbWVudCBiL3Rl
c3QvZXhhbXBsZS1hZHZlcnRpc2VtZW50DQogICAgPiBpbmRleCBmZDg0ZWFjLi4xZGI2MWQ2IDEw
MDc1NQ0KICAgID4gLS0tIGEvdGVzdC9leGFtcGxlLWFkdmVydGlzZW1lbnQNCiAgICA+ICsrKyBi
L3Rlc3QvZXhhbXBsZS1hZHZlcnRpc2VtZW50DQogICAgPiBAQCAtNiwxNSArNiwxMyBAQCBpbXBv
cnQgZGJ1cw0KICAgID4gIGltcG9ydCBkYnVzLmV4Y2VwdGlvbnMNCiAgICA+ICBpbXBvcnQgZGJ1
cy5tYWlubG9vcC5nbGliDQogICAgPiAgaW1wb3J0IGRidXMuc2VydmljZQ0KICAgID4gLQ0KICAg
ID4gLWltcG9ydCBhcnJheQ0KICAgID4gK2ltcG9ydCB0aW1lDQogICAgPiAraW1wb3J0IHRocmVh
ZGluZw0KICAgID4NCiAgICA+ICB0cnk6DQogICAgPiAtICBmcm9tIGdpLnJlcG9zaXRvcnkgaW1w
b3J0IEdPYmplY3QgICMgcHl0aG9uMw0KICAgID4gKyAgICBmcm9tIGdpLnJlcG9zaXRvcnkgaW1w
b3J0IEdPYmplY3QgICMgcHl0aG9uMw0KICAgID4gIGV4Y2VwdCBJbXBvcnRFcnJvcjoNCiAgICA+
IC0gIGltcG9ydCBnb2JqZWN0IGFzIEdPYmplY3QgICMgcHl0aG9uMg0KICAgID4gLQ0KICAgID4g
LWZyb20gcmFuZG9tIGltcG9ydCByYW5kaW50DQogICAgPiArICAgIGltcG9ydCBnb2JqZWN0IGFz
IEdPYmplY3QgICMgcHl0aG9uMg0KICAgID4NCiAgICA+ICBtYWlubG9vcCA9IE5vbmUNCiAgICA+
DQogICAgPiBAQCAtMTM2LDYgKzEzNCw3IEBAIGNsYXNzIEFkdmVydGlzZW1lbnQoZGJ1cy5zZXJ2
aWNlLk9iamVjdCk6DQogICAgPiAgICAgIGRlZiBSZWxlYXNlKHNlbGYpOg0KICAgID4gICAgICAg
ICAgcHJpbnQoJyVzOiBSZWxlYXNlZCEnICUgc2VsZi5wYXRoKQ0KICAgID4NCiAgICA+ICsNCiAg
ICA+ICBjbGFzcyBUZXN0QWR2ZXJ0aXNlbWVudChBZHZlcnRpc2VtZW50KToNCiAgICA+DQogICAg
PiAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBidXMsIGluZGV4KToNCiAgICA+IEBAIC0xNzAsNiAr
MTY5LDEyIEBAIGRlZiBmaW5kX2FkYXB0ZXIoYnVzKToNCiAgICA+ICAgICAgcmV0dXJuIE5vbmUN
CiAgICA+DQogICAgPg0KICAgID4gK2RlZiBzaHV0ZG93bigpOg0KICAgID4gKyAgICBwcmludCgn
QWR2ZXJ0aXNpbmcgZm9yIDEwIHNlY29uZHMuLi4nKQ0KICAgID4gKyAgICB0aW1lLnNsZWVwKDEw
KQ0KICAgID4gKyAgICBtYWlubG9vcC5xdWl0KCkNCiAgICA+ICsNCiAgICA+ICsNCiAgICA+ICBk
ZWYgbWFpbigpOg0KICAgID4gICAgICBnbG9iYWwgbWFpbmxvb3ANCiAgICA+DQogICAgPiBAQCAt
MTgzLDcgKzE4OCw3IEBAIGRlZiBtYWluKCk6DQogICAgPiAgICAgICAgICByZXR1cm4NCiAgICA+
DQogICAgPiAgICAgIGFkYXB0ZXJfcHJvcHMgPSBkYnVzLkludGVyZmFjZShidXMuZ2V0X29iamVj
dChCTFVFWl9TRVJWSUNFX05BTUUsIGFkYXB0ZXIpLA0KICAgID4gLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIm9yZy5mcmVlZGVza3RvcC5EQnVzLlByb3BlcnRpZXMiKTsNCiAg
ICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcmcuZnJlZWRlc2t0b3Au
REJ1cy5Qcm9wZXJ0aWVzIikNCiAgICA+DQogICAgPiAgICAgIGFkYXB0ZXJfcHJvcHMuU2V0KCJv
cmcuYmx1ZXouQWRhcHRlcjEiLCAiUG93ZXJlZCIsIGRidXMuQm9vbGVhbigxKSkNCiAgICA+DQog
ICAgPiBAQCAtMTk4LDcgKzIwMywxMyBAQCBkZWYgbWFpbigpOg0KICAgID4gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXBseV9oYW5kbGVyPXJlZ2lzdGVyX2FkX2NiLA0K
ICAgID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9oYW5kbGVy
PXJlZ2lzdGVyX2FkX2Vycm9yX2NiKQ0KICAgID4NCiAgICA+ICsgICAgdGhyZWFkaW5nLlRocmVh
ZCh0YXJnZXQ9c2h1dGRvd24pLnN0YXJ0KCkNCiAgICA+ICsNCiAgICA+ICAgICAgbWFpbmxvb3Au
cnVuKCkNCiAgICA+DQogICAgPiArICAgIGFkX21hbmFnZXIuVW5yZWdpc3RlckFkdmVydGlzZW1l
bnQodGVzdF9hZHZlcnRpc2VtZW50KQ0KICAgID4gKyAgICBwcmludCgnQWR2ZXJ0aXNlbWVudCB1
bnJlZ2lzdGVyZWQnKQ0KICAgID4gKyAgICBkYnVzLnNlcnZpY2UuT2JqZWN0LnJlbW92ZV9mcm9t
X2Nvbm5lY3Rpb24odGVzdF9hZHZlcnRpc2VtZW50KQ0KICAgID4gKw0KICAgID4gIGlmIF9fbmFt
ZV9fID09ICdfX21haW5fXyc6DQogICAgPiAgICAgIG1haW4oKQ0KICAgID4gLS0NCiAgICA+IDIu
Ny40DQogICAgPg0KICAgIA0KICAgIA0KICAgIA0KICAgIC0tIA0KICAgIEx1aXogQXVndXN0byB2
b24gRGVudHoNCiAgICANCg0K

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH BlueZ] test/example-advertisement: add shutdown code
  2018-09-12 14:57 Hunt, Preston
@ 2018-09-17 13:13 ` Luiz Augusto von Dentz
  2018-09-21 16:50   ` Hunt, Preston
  0 siblings, 1 reply; 9+ messages in thread
From: Luiz Augusto von Dentz @ 2018-09-17 13:13 UTC (permalink / raw)
  To: Hunt, Preston; +Cc: linux-bluetooth

Hi Preston,

On Wed, Sep 12, 2018 at 5:57 PM, Hunt, Preston <preston.hunt@intel.com> 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.

I would add the timeout as argument to the tool e.g.
example-advertisement --timeout=10

>
> This changeset shows how to properly release all resources.
> ---
>  test/example-advertisement | 25 ++++++++++++++++++-------
>  1 file changed, 18 insertions(+), 7 deletions(-)
>
> diff --git a/test/example-advertisement b/test/example-advertisement
> index fd84eac..1db61d6 100755
> --- a/test/example-advertisement
> +++ b/test/example-advertisement
> @@ -6,15 +6,13 @@ 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 +134,7 @@ class Advertisement(dbus.service.Object):
>      def Release(self):
>          print('%s: Released!' % self.path)
>
> +
>  class TestAdvertisement(Advertisement):
>
>      def __init__(self, bus, index):
> @@ -170,6 +169,12 @@ def find_adapter(bus):
>      return None
>
>
> +def shutdown():
> +    print('Advertising for 10 seconds...')
> +    time.sleep(10)
> +    mainloop.quit()
> +
> +
>  def main():
>      global mainloop
>
> @@ -183,7 +188,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 +203,13 @@ def main():
>                                       reply_handler=register_ad_cb,
>                                       error_handler=register_ad_error_cb)
>
> +    threading.Thread(target=shutdown).start()
> +
>      mainloop.run()
>
> +    ad_manager.UnregisterAdvertisement(test_advertisement)
> +    print('Advertisement unregistered')
> +    dbus.service.Object.remove_from_connection(test_advertisement)
> +
>  if __name__ == '__main__':
>      main()
> --
> 2.7.4
>



-- 
Luiz Augusto von Dentz

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PATCH BlueZ] test/example-advertisement: add shutdown code
@ 2018-09-12 14:57 Hunt, Preston
  2018-09-17 13:13 ` Luiz Augusto von Dentz
  0 siblings, 1 reply; 9+ messages in thread
From: Hunt, Preston @ 2018-09-12 14:57 UTC (permalink / raw)
  To: linux-bluetooth

VGhlIHByZXZpb3VzIHNhbXBsZSBjb2RlIGRpZCBub3QgcmVsZWFzZSBhbGwgcmVzb3VyY2VzIHdo
ZW4gc2h1dHRpbmcNCmRvd24uIFRoaXMgaXMgZmluZSB3aGVuIGl0J3MgYSBzdGFuZGFsb25lIHBy
b2dyYW0gc2luY2UgUHl0aG9uIHdpbGwgZnJlZQ0KYWxsIHJlc291cmNlcyBhdXRvbWF0aWNhbGx5
IHdoZW4gdGhlIHByb2Nlc3MgdGVybWluYXRlcy4gSG93ZXZlciwgaW4gYQ0KbG9uZy1ydW5uaW5n
IHByb2Nlc3MsIHRoaXMgd2lsbCBldmVudHVhbGx5IGNhdXNlIHByb2JsZW1zLg0KDQpUaGlzIGNo
YW5nZXNldCBzaG93cyBob3cgdG8gcHJvcGVybHkgcmVsZWFzZSBhbGwgcmVzb3VyY2VzLg0KLS0t
DQogdGVzdC9leGFtcGxlLWFkdmVydGlzZW1lbnQgfCAyNSArKysrKysrKysrKysrKysrKystLS0t
LS0tDQogMSBmaWxlIGNoYW5nZWQsIDE4IGluc2VydGlvbnMoKyksIDcgZGVsZXRpb25zKC0pDQoN
CmRpZmYgLS1naXQgYS90ZXN0L2V4YW1wbGUtYWR2ZXJ0aXNlbWVudCBiL3Rlc3QvZXhhbXBsZS1h
ZHZlcnRpc2VtZW50DQppbmRleCBmZDg0ZWFjLi4xZGI2MWQ2IDEwMDc1NQ0KLS0tIGEvdGVzdC9l
eGFtcGxlLWFkdmVydGlzZW1lbnQNCisrKyBiL3Rlc3QvZXhhbXBsZS1hZHZlcnRpc2VtZW50DQpA
QCAtNiwxNSArNiwxMyBAQCBpbXBvcnQgZGJ1cw0KIGltcG9ydCBkYnVzLmV4Y2VwdGlvbnMNCiBp
bXBvcnQgZGJ1cy5tYWlubG9vcC5nbGliDQogaW1wb3J0IGRidXMuc2VydmljZQ0KLQ0KLWltcG9y
dCBhcnJheQ0KK2ltcG9ydCB0aW1lDQoraW1wb3J0IHRocmVhZGluZw0KIA0KIHRyeToNCi0gIGZy
b20gZ2kucmVwb3NpdG9yeSBpbXBvcnQgR09iamVjdCAgIyBweXRob24zDQorICAgIGZyb20gZ2ku
cmVwb3NpdG9yeSBpbXBvcnQgR09iamVjdCAgIyBweXRob24zDQogZXhjZXB0IEltcG9ydEVycm9y
Og0KLSAgaW1wb3J0IGdvYmplY3QgYXMgR09iamVjdCAgIyBweXRob24yDQotDQotZnJvbSByYW5k
b20gaW1wb3J0IHJhbmRpbnQNCisgICAgaW1wb3J0IGdvYmplY3QgYXMgR09iamVjdCAgIyBweXRo
b24yDQogDQogbWFpbmxvb3AgPSBOb25lDQogDQpAQCAtMTM2LDYgKzEzNCw3IEBAIGNsYXNzIEFk
dmVydGlzZW1lbnQoZGJ1cy5zZXJ2aWNlLk9iamVjdCk6DQogICAgIGRlZiBSZWxlYXNlKHNlbGYp
Og0KICAgICAgICAgcHJpbnQoJyVzOiBSZWxlYXNlZCEnICUgc2VsZi5wYXRoKQ0KIA0KKw0KIGNs
YXNzIFRlc3RBZHZlcnRpc2VtZW50KEFkdmVydGlzZW1lbnQpOg0KIA0KICAgICBkZWYgX19pbml0
X18oc2VsZiwgYnVzLCBpbmRleCk6DQpAQCAtMTcwLDYgKzE2OSwxMiBAQCBkZWYgZmluZF9hZGFw
dGVyKGJ1cyk6DQogICAgIHJldHVybiBOb25lDQogDQogDQorZGVmIHNodXRkb3duKCk6DQorICAg
IHByaW50KCdBZHZlcnRpc2luZyBmb3IgMTAgc2Vjb25kcy4uLicpDQorICAgIHRpbWUuc2xlZXAo
MTApDQorICAgIG1haW5sb29wLnF1aXQoKQ0KKw0KKw0KIGRlZiBtYWluKCk6DQogICAgIGdsb2Jh
bCBtYWlubG9vcA0KIA0KQEAgLTE4Myw3ICsxODgsNyBAQCBkZWYgbWFpbigpOg0KICAgICAgICAg
cmV0dXJuDQogDQogICAgIGFkYXB0ZXJfcHJvcHMgPSBkYnVzLkludGVyZmFjZShidXMuZ2V0X29i
amVjdChCTFVFWl9TRVJWSUNFX05BTUUsIGFkYXB0ZXIpLA0KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIm9yZy5mcmVlZGVza3RvcC5EQnVzLlByb3BlcnRpZXMiKTsNCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcmcuZnJlZWRlc2t0b3AuREJ1cy5Qcm9w
ZXJ0aWVzIikNCiANCiAgICAgYWRhcHRlcl9wcm9wcy5TZXQoIm9yZy5ibHVlei5BZGFwdGVyMSIs
ICJQb3dlcmVkIiwgZGJ1cy5Cb29sZWFuKDEpKQ0KIA0KQEAgLTE5OCw3ICsyMDMsMTMgQEAgZGVm
IG1haW4oKToNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbHlfaGFu
ZGxlcj1yZWdpc3Rlcl9hZF9jYiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZXJyb3JfaGFuZGxlcj1yZWdpc3Rlcl9hZF9lcnJvcl9jYikNCiANCisgICAgdGhyZWFkaW5n
LlRocmVhZCh0YXJnZXQ9c2h1dGRvd24pLnN0YXJ0KCkNCisNCiAgICAgbWFpbmxvb3AucnVuKCkN
CiANCisgICAgYWRfbWFuYWdlci5VbnJlZ2lzdGVyQWR2ZXJ0aXNlbWVudCh0ZXN0X2FkdmVydGlz
ZW1lbnQpDQorICAgIHByaW50KCdBZHZlcnRpc2VtZW50IHVucmVnaXN0ZXJlZCcpDQorICAgIGRi
dXMuc2VydmljZS5PYmplY3QucmVtb3ZlX2Zyb21fY29ubmVjdGlvbih0ZXN0X2FkdmVydGlzZW1l
bnQpDQorDQogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoNCiAgICAgbWFpbigpDQotLSANCjIu
Ny40DQoNCg==

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2019-02-26  9:34 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-09-21 16:53 [PATCH BlueZ] test/example-advertisement: add shutdown code Hunt, Preston
2018-09-21 18:47 ` Luiz Augusto von Dentz
2018-09-21 21:37   ` Hunt, Preston
2018-09-24 15:46     ` Hunt, Preston
     [not found]       ` <203CC3D6-8987-4F56-AE91-2FD642E29FDB@intel.com>
2019-02-22 22:42         ` Hunt, Preston
2019-02-26  9:34           ` Luiz Augusto Von Dentz
  -- strict thread matches above, loose matches on Subject: below --
2018-09-12 14:57 Hunt, Preston
2018-09-17 13:13 ` Luiz Augusto von Dentz
2018-09-21 16:50   ` Hunt, Preston

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.