unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#43251: 27.1; DBus signals error when GetManagedObjects received while waiting for dbus-call-method
@ 2020-09-07  0:11 Hugh Daschbach
  2020-09-07  7:28 ` Michael Albinus
  0 siblings, 1 reply; 4+ messages in thread
From: Hugh Daschbach @ 2020-09-07  0:11 UTC (permalink / raw)
  To: 43251

[-- Attachment #1: Type: text/plain, Size: 1047 bytes --]

After exporting a property on an interface, that property will be
described, correctly, when a GetManagedObjects request is received from
another program in the system.

But if that GetManagedObjects method call is received while a
dbus-call-method request is waiting for a reply message, processing the
GetManagedObjects request signals an error.

I've attached three files:

- backtrace
- python test program
- elisp test script

The Python test program is a modified version of
https://gitlab.freedesktop.org/dbus/dbus-python/blob/master/examples/example-service.py.
It registers a method which is called by the elisp script.

Upon receipt of the elisp method call, the python program launches a
"dbus-send" command to issue a GetManagedObjects request back to the
source of the method call.  That generates the error described above.

To reproduce this problem:

- python2 /var/tmp/example-service.py
- emacs -Q --load ~/.config/emacs/dbus-mo-signal.el --eval "(main)"

That should invoke the debugger within ten seconds or so.

Thanks,
Hugh


[-- Attachment #2: Backtrace from GetManagedObect processing --]
[-- Type: text/plain, Size: 36680 bytes --]

Debugger entered--Lisp error: (wrong-type-argument listp dbus-call-method-handler)
  car(dbus-call-method-handler)
  (let
      ((item
        (car --dolist-tail--)))
    (if
        (and
         (equal
          (butlast key)
          (list :property bus interface))
         (string-equal path
                       (nth 2 item))
         (not
          (functionp
           (car
            (last item)))))
        (progn
          (setq result
                (cons
                 (list :dict-entry
                       (car
                        (last key))
                       (list :variant
                             (cdr (car (last item)))))
                 result))))
    (setq --dolist-tail--
          (cdr --dolist-tail--)))
  (while --dolist-tail--
    (let
        ((item
          (car --dolist-tail--)))
      (if
          (and
           (equal
            (butlast key)
            (list :property bus interface))
           (string-equal path
                         (nth 2 item))
           (not
            (functionp
             (car
              (last item)))))
          (progn
            (setq result
                  (cons
                   (list :dict-entry
                         (car (last key))
                         (list :variant (cdr (car (last item)))))
                   result))))
      (setq --dolist-tail--
            (cdr --dolist-tail--))))
  (let
      ((--dolist-tail-- val))
    (while --dolist-tail--
      (let
          ((item
            (car --dolist-tail--)))
        (if
            (and
             (equal
              (butlast key)
              (list :property bus interface))
             (string-equal path
                           (nth 2 item))
             (not
              (functionp
               (car (last item)))))
            (progn
              (setq result
                    (cons
                     (list :dict-entry (car (last key)) (list :variant (cdr (car (last item)))))
                     result))))
        (setq --dolist-tail--
              (cdr --dolist-tail--)))))
  (closure
   ((result)
    (property)
    (interface . "org.freedesktop.DBus.Properties")
    (method . "GetAll")
    (path . "/node0")
    (service . ":1.17675")
    (bus . :session)
    (args "org.freedesktop.DBus.Properties")
    t)
   (key val)
   (let
       ((--dolist-tail-- val))
     (while --dolist-tail--
       (let
           ((item
             (car --dolist-tail--)))
         (if
             (and
              (equal (butlast key) (list :property bus interface))
              (string-equal path (nth 2 item))
              (not (functionp (car (last item)))))
             (progn
               (setq result (cons (list :dict-entry (car (last key)) (list :variant (cdr (car (last item))))) result))))
         (setq --dolist-tail--
               (cdr --dolist-tail--))))))((:serial :session 5) dbus-call-method-handler)
  maphash((closure
           ((result)
            (property)
            (interface . "org.freedesktop.DBus.Properties")
            (method . "GetAll")
            (path . "/node0")
            (service . ":1.17675")
            (bus . :session)
            (args "org.freedesktop.DBus.Properties")
            t)
           (key val)
           (let
               ((--dolist-tail-- val))
             (while --dolist-tail--
               (let
                   ((item
                     (car --dolist-tail--)))
                 (if
                     (and
                      (equal (butlast key) (list :property bus interface))
                      (string-equal path (nth 2 item))
                      (not (functionp (car (last item)))))
                     (progn
                       (setq result (cons (list :dict-entry (car (last key)) (list :variant (cdr (car (last item))))) result))))
                 (setq --dolist-tail--
                       (cdr --dolist-tail--))))))
          #<hash-table equal 9/65 0x1fc13687fba1>)
  (let
      (result)
    (maphash
     #'(lambda
         (key val)
         (let
             ((--dolist-tail-- val))
           (while --dolist-tail--
            (let
                ((item
                  (car --dolist-tail--)))
              (if
                  (and
                   (equal
                    (butlast key)
                    (list :property bus interface))
                   (string-equal path
                    (nth 2 item))
                   (not
                    (functionp
                     (car
                      (last item)))))
                  (progn
                    (setq result
                     (cons
                      (list :dict-entry
                       (car
                        (last key))
                       (list :variant
                        (cdr
                         (car
                          (last item)))))
                      result))))
              (setq --dolist-tail--
               (cdr --dolist-tail--))))))
     dbus-registered-objects-table)
    (list :array
          (or result
              '(:signature "{sv}"))))
  (cond
   ((string-equal method "Get")
    (let
        ((entry
          (dbus-get-this-registered-property bus service path interface property)))
      (if
          (string-equal path
                        (nth 2
                             (car entry)))
          (progn
            (list
             (list ':variant
                   (cdr (car (last (car entry))))))))))
   ((string-equal method "Set")
    (let*
        ((value
          (car
           (car
            (cdr (cdr args)))))
         (entry
          (dbus-get-this-registered-property bus service path interface property))
         (object
          (car
           (last
            (car entry)))))
      (if
          (consp object)
          nil
        (signal 'dbus-error
                (list "Property not registered at path" property path)))
      (if
          (member :readwrite
                  (car object))
          nil
        (signal 'dbus-error
                (list "Property not writable at path" property path)))
      (puthash
       (list :property bus interface property)
       (cons
        (append
         (butlast
          (car entry))
         (list
          (cons (car object) value)))
        (dbus-get-other-registered-property bus service path interface property))
       dbus-registered-objects-table)
      (if
          (member :emits-signal
                  (car object))
          (progn
            (dbus-send-signal bus service path dbus-interface-properties "PropertiesChanged"
                              (list
                               (list ':dict-entry property (list ':variant value)))
                              '(:array))))
      :ignore))
   ((string-equal method "GetAll")
    (let
        (result)
      (maphash
       #'(lambda
           (key val)
           (let
               ((--dolist-tail-- val))
             (while --dolist-tail-- (let ((item (car --dolist-tail--))) (if (and (equal (butlast key) (list :property bus interface)) (string-equal path (nth 2 item)) (not (functionp (car (last item))))) (progn (setq result (cons (list :dict-entry (car ...) (list :variant ...)) result)))) (setq --dolist-tail-- (cdr --dolist-tail--))))))
       dbus-registered-objects-table)
      (list :array
            (or result
                '(:signature "{sv}"))))))
  (let
      ((bus
        (dbus-event-bus-name last-input-event))
       (service
        (dbus-event-service-name last-input-event))
       (path
        (dbus-event-path-name last-input-event))
       (method
        (dbus-event-member-name last-input-event))
       (interface
        (car args))
       (property
        (car
         (cdr args))))
    (cond
     ((string-equal method "Get")
      (let
          ((entry
            (dbus-get-this-registered-property bus service path interface property)))
        (if
            (string-equal path
                          (nth 2
                               (car entry)))
            (progn
              (list
               (list ':variant
                     (cdr
                      (car
                       (last
                        (car entry))))))))))
     ((string-equal method "Set")
      (let*
          ((value
            (car
             (car
              (cdr
               (cdr args)))))
           (entry
            (dbus-get-this-registered-property bus service path interface property))
           (object
            (car
             (last
              (car entry)))))
        (if
            (consp object)
            nil
          (signal 'dbus-error
                  (list "Property not registered at path" property path)))
        (if
            (member :readwrite
                    (car object))
            nil
          (signal 'dbus-error
                  (list "Property not writable at path" property path)))
        (puthash
         (list :property bus interface property)
         (cons
          (append
           (butlast
            (car entry))
           (list
            (cons
             (car object)
             value)))
          (dbus-get-other-registered-property bus service path interface property))
         dbus-registered-objects-table)
        (if
            (member :emits-signal
                    (car object))
            (progn
              (dbus-send-signal bus service path dbus-interface-properties "PropertiesChanged"
                                (list
                                 (list ':dict-entry property
                                       (list ':variant value)))
                                '(:array))))
        :ignore))
     ((string-equal method "GetAll")
      (let
          (result)
        (maphash
         #'(lambda
             (key val)
             (let
                 ((--dolist-tail-- val))
               (while --dolist-tail--
                (let
                    ((item
                      (car --dolist-tail--)))
                  (if
                      (and
                       (equal
                        (butlast key)
                        (list :property bus interface))
                       (string-equal path
                        (nth 2 item))
                       (not
                        (functionp
                         (car
                          (last item)))))
                      (progn
                        (setq result
                         (cons
                          (list :dict-entry
                           (car
                            (last key))
                           (list :variant
                            (cdr
                             (car
                              (last item)))))
                          result))))
                  (setq --dolist-tail--
                   (cdr --dolist-tail--))))))
         dbus-registered-objects-table)
        (list :array
              (or result
                  '(:signature "{sv}")))))))
  dbus-property-handler("org.freedesktop.DBus.Properties")
  (let
      ((last-input-event
        (append
         (butlast last-input-event 4)
         (list object dbus-interface-properties "GetAll" 'dbus-property-handler))))
    (dbus-property-handler interface))
  (cons interface
        (let
            ((last-input-event
              (append
               (butlast last-input-event 4)
               (list object dbus-interface-properties "GetAll" 'dbus-property-handler))))
          (dbus-property-handler interface)))
  (list
   (cons interface
         (let
             ((last-input-event
               (append
                (butlast last-input-event 4)
                (list object dbus-interface-properties "GetAll" 'dbus-property-handler))))
           (dbus-property-handler interface))))
  (append
   (list
    (cons interface
          (let
              ((last-input-event
                (append
                 (butlast last-input-event 4)
                 (list object dbus-interface-properties "GetAll" 'dbus-property-handler))))
            (dbus-property-handler interface))))
   (cdr
    (assoc object result)))
  (setcdr
   (assoc object result)
   (append
    (list
     (cons interface
           (let
               ((last-input-event
                 (append (butlast last-input-event 4) (list object dbus-interface-properties "GetAll" 'dbus-property-handler))))
             (dbus-property-handler interface))))
    (cdr
     (assoc object result))))
  (if
      (assoc interface
             (cdr
              (assoc object result)))
      nil
    (setcdr
     (assoc object result)
     (append
      (list
       (cons interface
             (let
                 ((last-input-event (append (butlast last-input-event 4) (list object dbus-interface-properties "GetAll" 'dbus-property-handler))))
               (dbus-property-handler interface))))
      (cdr
       (assoc object result)))))
  (let
      ((interface
        (car --dolist-tail--)))
    (if
        (assoc object result)
        nil
      (setq result
            (cons
             (list object)
             result)))
    (if
        (assoc interface
               (cdr
                (assoc object result)))
        nil
      (setcdr
       (assoc object result)
       (append
        (list
         (cons interface
               (let
                   ((last-input-event (append (butlast last-input-event 4) (list object dbus-interface-properties "GetAll" 'dbus-property-handler))))
                 (dbus-property-handler interface))))
        (cdr
         (assoc object result)))))
    (setq --dolist-tail--
          (cdr --dolist-tail--)))
  (while --dolist-tail--
    (let
        ((interface
          (car --dolist-tail--)))
      (if
          (assoc object result)
          nil
        (setq result
              (cons
               (list object)
               result)))
      (if
          (assoc interface
                 (cdr
                  (assoc object result)))
          nil
        (setcdr
         (assoc object result)
         (append
          (list
           (cons interface
                 (let ((last-input-event (append (butlast last-input-event 4) (list object dbus-interface-properties "GetAll" 'dbus-property-handler)))) (dbus-property-handler interface))))
          (cdr
           (assoc object result)))))
      (setq --dolist-tail--
            (cdr --dolist-tail--))))
  (let
      ((--dolist-tail--
        (cons
         (nth 2 key)
         interfaces)))
    (while --dolist-tail--
      (let
          ((interface
            (car --dolist-tail--)))
        (if
            (assoc object result)
            nil
          (setq result
                (cons
                 (list object)
                 result)))
        (if
            (assoc interface
                   (cdr
                    (assoc object result)))
            nil
          (setcdr
           (assoc object result)
           (append
            (list
             (cons interface (let ((last-input-event (append (butlast last-input-event 4) (list object dbus-interface-properties "GetAll" 'dbus-property-handler)))) (dbus-property-handler interface))))
            (cdr
             (assoc object result)))))
        (setq --dolist-tail--
              (cdr --dolist-tail--)))))
  (progn
    (let
        ((--dolist-tail--
          (cons
           (nth 2 key)
           interfaces)))
      (while --dolist-tail--
        (let
            ((interface
              (car --dolist-tail--)))
          (if
              (assoc object result)
              nil
            (setq result
                  (cons
                   (list object)
                   result)))
          (if
              (assoc interface
                     (cdr
                      (assoc object result)))
              nil
            (setcdr
             (assoc object result)
             (append
              (list (cons interface (let ((last-input-event (append (butlast last-input-event 4) (list object dbus-interface-properties "GetAll" 'dbus-property-handler)))) (dbus-property-handler interface))))
              (cdr (assoc object result)))))
          (setq --dolist-tail--
                (cdr --dolist-tail--))))))
  (if
      (and
       (equal
        (butlast key 2)
        (list :method bus))
       (string-prefix-p path object))
      (progn
        (let
            ((--dolist-tail--
              (cons
               (nth 2 key)
               interfaces)))
          (while --dolist-tail--
            (let
                ((interface
                  (car --dolist-tail--)))
              (if
                  (assoc object result)
                  nil
                (setq result
                      (cons (list object) result)))
              (if
                  (assoc interface
                         (cdr (assoc object result)))
                  nil
                (setcdr
                 (assoc object result)
                 (append (list (cons interface (let ((last-input-event (append (butlast last-input-event 4) (list object dbus-interface-properties "GetAll" ...)))) (dbus-property-handler interface)))) (cdr (assoc object result)))))
              (setq --dolist-tail--
                    (cdr --dolist-tail--)))))))
  (let
      ((object
        (or
         (nth 2
              (car-safe val))
         "")))
    (if
        (and
         (equal
          (butlast key 2)
          (list :method bus))
         (string-prefix-p path object))
        (progn
          (let
              ((--dolist-tail--
                (cons
                 (nth 2 key)
                 interfaces)))
            (while --dolist-tail--
              (let
                  ((interface (car --dolist-tail--)))
                (if
                    (assoc object result)
                    nil
                  (setq result (cons (list object) result)))
                (if
                    (assoc interface (cdr (assoc object result)))
                    nil
                  (setcdr (assoc object result) (append (list (cons interface (let ((last-input-event (append ... ...))) (dbus-property-handler interface)))) (cdr (assoc object result)))))
                (setq --dolist-tail--
                      (cdr --dolist-tail--))))))))
  (closure
   ((result
     ("/node0"))
    (interfaces "org.freedesktop.DBus.ObjectManager" "org.freedesktop.DBus.Peer")
    (path . "/")
    (bus . :session)
    t)
   (key val)
   (let
       ((object
         (or
          (nth 2
               (car-safe val))
          "")))
     (if
         (and
          (equal
           (butlast key 2)
           (list :method bus))
          (string-prefix-p path object))
         (progn
           (let
               ((--dolist-tail-- (cons (nth 2 key) interfaces)))
             (while --dolist-tail--
               (let ((interface (car --dolist-tail--))) (if (assoc object result) nil (setq result (cons (list object) result))) (if (assoc interface (cdr (assoc object result))) nil (setcdr (assoc object result) (append (list (cons interface (let (...) (dbus-property-handler interface)))) (cdr (assoc object result))))) (setq --dolist-tail-- (cdr --dolist-tail--)))))))))((:method :session "org.freedesktop.DBus.Properties" "Get") ((nil "org.gnu.Emacs" "/node0" dbus-property-handler)))
  maphash((closure ((result ("/node0")) (interfaces "org.freedesktop.DBus.ObjectManager" "org.freedesktop.DBus.Peer") (path . "/") (bus . :session) t) (key val) (let ((object (or (nth 2 (car-safe val)) ""))) (if (and (equal (butlast key 2) (list :method bus)) (string-prefix-p path object)) (progn (let ((--dolist-tail-- ...)) (while --dolist-tail-- (let ... ... ... ...))))))) #<hash-table equal 9/65 0x1fc13687fba1>)
  (let
      (interfaces result)
    (maphash
     #'(lambda
         (key val)
         (if
             (and
              (equal
               (butlast key 2)
               (list :method bus))
              (null
               (nth 2 (car-safe val))))
             (progn
               (setq interfaces
                (cons (nth 2 key) interfaces)))))
     dbus-registered-objects-table)
    (maphash
     #'(lambda
         (key val)
         (let
             ((object
               (or (nth 2 (car-safe val)) "")))
           (if
               (and
                (equal (butlast key 2) (list :method bus))
                (string-prefix-p path object))
               (progn
                 (let ((--dolist-tail-- (cons (nth 2 key) interfaces))) (while --dolist-tail-- (let ((interface (car --dolist-tail--))) (if (assoc object result) nil (setq result (cons (list object) result))) (if (assoc interface (cdr (assoc object result))) nil (setcdr (assoc object result) (append (list (cons interface ...)) (cdr (assoc object result))))) (setq --dolist-tail-- (cdr --dolist-tail--)))))))))
     dbus-registered-objects-table)
    (list :array
          (or
           (mapcar
            #'(lambda
                (x)
                (list :dict-entry :object-path
                 (car x)
                 (cons :array (mapcar #'(lambda (y) (cons :dict-entry y)) (cdr x)))))
            result)
           '(:signature "{oa{sa{sv}}}"))))
  (let*
      ((last-input-event last-input-event)
       (bus
        (dbus-event-bus-name last-input-event))
       (path
        (dbus-event-path-name last-input-event)))
    (let
        (interfaces result)
      (maphash
       #'(lambda
           (key val)
           (if
               (and
                (equal (butlast key 2) (list :method bus))
                (null (nth 2 (car-safe val))))
               (progn
                 (setq interfaces (cons (nth 2 key) interfaces)))))
       dbus-registered-objects-table)
      (maphash
       #'(lambda
           (key val)
           (let
               ((object (or (nth 2 (car-safe val)) "")))
             (if
                 (and (equal (butlast key 2) (list :method bus)) (string-prefix-p path object))
                 (progn (let ((--dolist-tail-- (cons (nth 2 key) interfaces))) (while --dolist-tail-- (let ((interface (car --dolist-tail--))) (if (assoc object result) nil (setq result (cons (list object) result))) (if (assoc interface (cdr (assoc object result))) nil (setcdr (assoc object result) (append (list ...) (cdr ...)))) (setq --dolist-tail-- (cdr --dolist-tail--)))))))))
       dbus-registered-objects-table)
      (list :array
            (or
             (mapcar
              #'(lambda
                  (x)
                  (list :dict-entry :object-path (car x) (cons :array (mapcar #'(lambda (y) (cons :dict-entry y)) (cdr x)))))
              result)
             '(:signature "{oa{sa{sv}}}")))))
  dbus-managed-objects-handler()
  apply(dbus-managed-objects-handler nil)
  (setq result
        (apply
         (nth 8 event)
         (nthcdr 9 event)))
  (let
      (result)
    (dbus-check-event event)
    (if
        (= dbus-message-type-error
           (nth 2 event))
        (progn
          (signal 'dbus-error
                  (nthcdr 9 event))))
    (setq result
          (apply
           (nth 8 event)
           (nthcdr 9 event)))
    (if
        (= dbus-message-type-method-call
           (nth 2 event))
        (progn
          (condition-case err
              (progn
                (if
                    (eq result :ignore)
                    (dbus-method-return-internal
                     (nth 1 event)
                     (nth 4 event)
                     (nth 3 event))
                  (apply 'dbus-method-return-internal
                         (nth 1 event)
                         (nth 4 event)
                         (nth 3 event)
                         (if (consp result) result (list result)))))
            (dbus-error
             (if dbus-debug
                 (progn
                   (signal (car err) (cdr err)))))))))
  (condition-case err
      (let
          (result)
        (dbus-check-event event)
        (if
            (= dbus-message-type-error
               (nth 2 event))
            (progn
              (signal 'dbus-error
                      (nthcdr 9 event))))
        (setq result
              (apply
               (nth 8 event)
               (nthcdr 9 event)))
        (if
            (= dbus-message-type-method-call
               (nth 2 event))
            (progn
              (condition-case err
                  (progn
                    (if
                        (eq result :ignore)
                        (dbus-method-return-internal (nth 1 event) (nth 4 event) (nth 3 event))
                      (apply 'dbus-method-return-internal (nth 1 event) (nth 4 event) (nth 3 event) (if (consp result) result (list result)))))
                (dbus-error
                 (if dbus-debug
                     (progn (signal (car err) (cdr err)))))))))
    (dbus-error
     (if
         (= dbus-message-type-method-call
            (nth 2 event))
         (progn
           (condition-case err
               (progn
                 (dbus-method-error-internal
                  (nth 1 event)
                  (nth 4 event)
                  (nth 3 event)
                  (car (cdr err))))
             (dbus-error
              (if dbus-debug
                  (progn (signal (car err) (cdr err))))))))
     (run-hook-with-args 'dbus-event-error-functions event err)
     (if dbus-debug
         (progn
           (signal
            (car err)
            (cdr err))))))
  dbus-handle-event((dbus-event :session 1 2 ":1.17675" "/" "org.freedesktop.DBus.ObjectManager" "GetManagedObjects" dbus-managed-objects-handler))
  funcall-interactively(dbus-handle-event (dbus-event :session 1 2 ":1.17675" "/" "org.freedesktop.DBus.ObjectManager" "GetManagedObjects" dbus-managed-objects-handler))
  call-interactively(dbus-handle-event nil [(dbus-event :session 1 2 ":1.17675" "/" "org.freedesktop.DBus.ObjectManager" "GetManagedObjects" dbus-managed-objects-handler)])
  command-execute(dbus-handle-event nil [(dbus-event :session 1 2 ":1.17675" "/" "org.freedesktop.DBus.ObjectManager" "GetManagedObjects" dbus-managed-objects-handler)] t)
  read-event(nil nil 0.0013400956406250007)
  (let
      ((inhibit-redisplay t)
       unread-command-events)
    (read-event nil nil check-interval))
  (let
      ((event
        (let
            ((inhibit-redisplay t)
             unread-command-events)
          (read-event nil nil check-interval))))
    (if event
        (progn
          (if
              (condition-case nil
                  (progn
                    (dbus-check-event event))
                (error nil))
              (setq result
                    (gethash key dbus-return-values-table))
            (setq unread-command-events
                  (nconc unread-command-events
                         (cons event nil))))))
    (if
        (< check-interval 1)
        (progn
          (setq check-interval
                (* check-interval 1.05)))))
  (while
      (eq
       (car result)
       :pending)
    (let
        ((event
          (let
              ((inhibit-redisplay t)
               unread-command-events)
            (read-event nil nil check-interval))))
      (if event
          (progn
            (if
                (condition-case nil
                    (progn
                      (dbus-check-event event))
                  (error nil))
                (setq result
                      (gethash key dbus-return-values-table))
              (setq unread-command-events
                    (nconc unread-command-events
                           (cons event nil))))))
      (if
          (< check-interval 1)
          (progn
            (setq check-interval
                  (* check-interval 1.05))))))
  (progn
    (while
        (eq
         (car result)
         :pending)
      (let
          ((event
            (let
                ((inhibit-redisplay t)
                 unread-command-events)
              (read-event nil nil check-interval))))
        (if event
            (progn
              (if
                  (condition-case nil
                      (progn (dbus-check-event event))
                    (error nil))
                  (setq result
                        (gethash key dbus-return-values-table))
                (setq unread-command-events
                      (nconc unread-command-events (cons event nil))))))
        (if
            (< check-interval 1)
            (progn
              (setq check-interval
                    (* check-interval 1.05)))))))
  (unwind-protect
      (progn
        (while
            (eq
             (car result)
             :pending)
          (let
              ((event
                (let
                    ((inhibit-redisplay t) unread-command-events)
                  (read-event nil nil check-interval))))
            (if event
                (progn
                  (if
                      (condition-case nil (progn (dbus-check-event event)) (error nil))
                      (setq result (gethash key dbus-return-values-table))
                    (setq unread-command-events (nconc unread-command-events (cons event nil))))))
            (if
                (< check-interval 1)
                (progn
                  (setq check-interval
                        (* check-interval 1.05)))))))
    (cancel-timer -with-timeout-timer-))
  (let*
      ((-with-timeout-timer-
        (run-with-timer
         (if timeout
             (/ timeout 1000.0)
           25)
         nil
         #'(lambda nil
             (throw 'timeout 'timeout))))
       (with-timeout-timers
        (cons -with-timeout-timer- with-timeout-timers)))
    (unwind-protect
        (progn
          (while
              (eq
               (car result)
               :pending)
            (let
                ((event
                  (let ((inhibit-redisplay t) unread-command-events) (read-event nil nil check-interval))))
              (if event
                  (progn
                    (if (condition-case nil (progn (dbus-check-event event)) (error nil)) (setq result (gethash key dbus-return-values-table)) (setq unread-command-events (nconc unread-command-events (cons event nil))))))
              (if
                  (< check-interval 1)
                  (progn
                    (setq check-interval (* check-interval 1.05)))))))
      (cancel-timer -with-timeout-timer-)))
  (catch 'timeout
    (let*
        ((-with-timeout-timer-
          (run-with-timer
           (if timeout
               (/ timeout 1000.0)
             25)
           nil
           #'(lambda nil
               (throw 'timeout 'timeout))))
         (with-timeout-timers
          (cons -with-timeout-timer- with-timeout-timers)))
      (unwind-protect
          (progn
            (while
                (eq
                 (car result)
                 :pending)
              (let
                  ((event (let ((inhibit-redisplay t) unread-command-events) (read-event nil nil check-interval))))
                (if event
                    (progn (if (condition-case nil (progn (dbus-check-event event)) (error nil)) (setq result (gethash key dbus-return-values-table)) (setq unread-command-events (nconc unread-command-events (cons event nil))))))
                (if
                    (< check-interval 1)
                    (progn (setq check-interval (* check-interval 1.05)))))))
        (cancel-timer -with-timeout-timer-))))
  (let
      ((-with-timeout-value-
        (catch 'timeout
          (let*
              ((-with-timeout-timer-
                (run-with-timer (if timeout (/ timeout 1000.0) 25) nil #'(lambda nil (throw 'timeout 'timeout))))
               (with-timeout-timers
                (cons -with-timeout-timer- with-timeout-timers)))
            (unwind-protect
                (progn
                  (while (eq (car result) :pending) (let ((event (let ((inhibit-redisplay t) unread-command-events) (read-event nil nil check-interval)))) (if event (progn (if (condition-case nil (progn (dbus-check-event event)) (error nil)) (setq result (gethash key dbus-return-values-table)) (setq unread-command-events (nconc unread-command-events (cons event nil)))))) (if (< check-interval 1) (progn (setq check-interval (* check-interval 1.05)))))))
              (cancel-timer -with-timeout-timer-))))))
    (if
        (eq -with-timeout-value- 'timeout)
        (progn
          (signal 'dbus-error
                  (list "call timed out")))
      -with-timeout-value-))
  (progn
    (let
        ((-with-timeout-value-
          (catch 'timeout
            (let*
                ((-with-timeout-timer- (run-with-timer (if timeout (/ timeout 1000.0) 25) nil #'(lambda nil (throw 'timeout 'timeout))))
                 (with-timeout-timers (cons -with-timeout-timer- with-timeout-timers)))
              (unwind-protect
                  (progn (while (eq (car result) :pending) (let ((event (let ((inhibit-redisplay t) unread-command-events) (read-event nil nil check-interval)))) (if event (progn (if (condition-case nil (progn ...) (error nil)) (setq result (gethash key dbus-return-values-table)) (setq unread-command-events (nconc unread-command-events ...))))) (if (< check-interval 1) (progn (setq check-interval (* check-interval 1.05)))))))
                (cancel-timer -with-timeout-timer-))))))
      (if
          (eq -with-timeout-value- 'timeout)
          (progn
            (signal 'dbus-error
                    (list "call timed out")))
        -with-timeout-value-))
    (if
        (eq
         (car result)
         :error)
        (progn
          (signal
           (car
            (cdr result))
           (cdr
            (cdr result)))))
    (cdr result))
  (unwind-protect
      (progn
        (let
            ((-with-timeout-value-
              (catch 'timeout
                (let*
                    ((-with-timeout-timer- (run-with-timer (if timeout (/ timeout 1000.0) 25) nil #'(lambda nil (throw 'timeout 'timeout)))) (with-timeout-timers (cons -with-timeout-timer- with-timeout-timers)))
                  (unwind-protect (progn (while (eq (car result) :pending) (let ((event (let (... unread-command-events) (read-event nil nil check-interval)))) (if event (progn (if (condition-case nil ... ...) (setq result ...) (setq unread-command-events ...)))) (if (< check-interval 1) (progn (setq check-interval (* check-interval 1.05))))))) (cancel-timer -with-timeout-timer-))))))
          (if
              (eq -with-timeout-value- 'timeout)
              (progn
                (signal 'dbus-error
                        (list "call timed out")))
            -with-timeout-value-))
        (if
            (eq
             (car result)
             :error)
            (progn
              (signal
               (car
                (cdr result))
               (cdr
                (cdr result)))))
        (cdr result))
    (remhash key dbus-return-values-table))
  (let
      ((timeout
        (plist-get args :timeout))
       (check-interval 0.001)
       (key
        (apply 'dbus-message-internal dbus-message-type-method-call bus service path interface method 'dbus-call-method-handler args))
       (result
        (cons :pending nil)))
    (puthash key result dbus-return-values-table)
    (unwind-protect
        (progn
          (let
              ((-with-timeout-value-
                (catch 'timeout
                  (let* ((-with-timeout-timer- (run-with-timer (if timeout (/ timeout 1000.0) 25) nil #'(lambda nil (throw 'timeout 'timeout)))) (with-timeout-timers (cons -with-timeout-timer- with-timeout-timers))) (unwind-protect (progn (while (eq (car result) :pending) (let ((event (let ... ...))) (if event (progn (if ... ... ...))) (if (< check-interval 1) (progn (setq check-interval ...)))))) (cancel-timer -with-timeout-timer-))))))
            (if
                (eq -with-timeout-value- 'timeout)
                (progn
                  (signal 'dbus-error
                          (list "call timed out")))
              -with-timeout-value-))
          (if
              (eq
               (car result)
               :error)
              (progn
                (signal
                 (car
                  (cdr result))
                 (cdr
                  (cdr result)))))
          (cdr result))
      (remhash key dbus-return-values-table)))
  dbus-call-method(:session "com.example.SampleService" "/SomeObject" "com.example.SampleInterface" "HelloWorld" "xxx")
  main()
  eval((main) t)
  command-line-1(("--load" "/home/hugh/.config/emacs/dbus-mo-signal.el" "--eval" "(main)"))
  command-line()
  normal-top-level()

[-- Attachment #3: Python target for elisp script --]
[-- Type: application/octet-stream, Size: 3581 bytes --]

#!/usr/bin/env python

usage = """Usage:
python example-service.py &
python example-client.py
python example-async-client.py
python example-client.py --exit-service
"""

# Copyright (C) 2004-2006 Red Hat Inc. <http://www.redhat.com/>
# Copyright (C) 2005-2007 Collabora Ltd. <http://www.collabora.co.uk/>
#
# SPDX-License-Identifier: MIT
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation
# files (the "Software"), to deal in the Software without
# restriction, including without limitation the rights to use, copy,
# modify, merge, publish, distribute, sublicense, and/or sell copies
# of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be
# included in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
# DEALINGS IN THE SOFTWARE.

from gi.repository import GLib

import dbus
import dbus.service
import dbus.mainloop.glib
import subprocess

class DemoException(dbus.DBusException):
    _dbus_error_name = 'com.example.DemoException'

class SomeObject(dbus.service.Object):

    @dbus.service.method("com.example.SampleInterface",
                         in_signature='s', out_signature='as',
                         sender_keyword='sender')
    def HelloWorld(self, hello_message, sender=None):
        print (str(hello_message))
        print (str(sender))
        subprocess.call(["dbus-send",
                         "--print-reply",
                         "--type=method_call",
                         "--session",
                         "--dest={}".format(sender),
                         "/",
                         "org.freedesktop.DBus.ObjectManager.GetManagedObjects"])
        return ["Hello", " from example-service.py", "with unique name",
                session_bus.get_unique_name()]

    @dbus.service.method("com.example.SampleInterface",
                         in_signature='', out_signature='')
    def RaiseException(self):
        raise DemoException('The RaiseException method does what you might '
                            'expect')

    @dbus.service.method("com.example.SampleInterface",
                         in_signature='', out_signature='(ss)')
    def GetTuple(self):
        return ("Hello Tuple", " from example-service.py")

    @dbus.service.method("com.example.SampleInterface",
                         in_signature='', out_signature='a{ss}')
    def GetDict(self):
        return {"first": "Hello Dict", "second": " from example-service.py"}

    @dbus.service.method("com.example.SampleInterface",
                         in_signature='', out_signature='')
    def Exit(self):
        mainloop.quit()


if __name__ == '__main__':
    dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)

    session_bus = dbus.SessionBus()
    name = dbus.service.BusName("com.example.SampleService", session_bus)
    object = SomeObject(session_bus, '/SomeObject')

    mainloop = GLib.MainLoop()
    print "Running example service."
    print usage
    mainloop.run()

[-- Attachment #4: elisp test script --]
[-- Type: text/plain, Size: 1931 bytes --]

;;; dbus-properties-test.el --- Test program for complex :dict-entry.  -*- lexical-binding: t; -*-

;; Copyright (C) 2020  Hugh Daschbach

;; Author: Hugh Daschbach <hugh@ccss.com>
;; Keywords: tools

;; This program is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.

;; This program is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
;; GNU General Public License for more details.

;; You should have received a copy of the GNU General Public License
;; along with this program.  If not, see <https://www.gnu.org/licenses/>.

;;; Commentary:

;; This program demonstrates an error in handling D-Bus properties
;; interface.
;;
;; `dbus-property-handler' provides an org.freedesktop.DBus.Properties
;; interface to respond to requests for registered properties.  But,
;; unlike methods and signals, properties are not stored per interface
;; per object.  They are merely stored per interface.
;;
;; So the current implementation cannot support properties on the same
;; interface with a different object path.


;;; Code:

(require 'dbus)

(defun main ()
  (interactive)
  (setq dbus-debug t)
  (setq debug-on-error t)
  (sit-for 1)
  (dbus-register-property :session
                          "org.gnu.Emacs"
                          "/node0"
                          "org.bluez.GattService1"
                          "Device"
                          :readwrite
                          "-node0-")
  (sit-for 1)
  (dbus-call-method :session "com.example.SampleService" "/SomeObject" "com.example.SampleInterface" "HelloWorld" "xxx"))

(provide 'dbus-properties-test)

;;; dbus-properties-test.el ends here

[-- Attachment #5: Type: text/plain, Size: 40968 bytes --]



\f


In GNU Emacs 27.1 (build 1, x86_64-pc-linux-gnu, X toolkit, Xaw3d scroll bars)
 of 2020-08-06 built on klaatu
Repository revision: 86d8d76aa36037184db0b2897c434cdaab1a9ae8
Repository branch: emacs-27
Windowing system distributor 'The X.Org Foundation', version 11.0.12008000
System Description: Artix Linux

Recent messages:
Wrote /home/hugh/.config/emacs/dbus-mo-signal.el
Saving file /home/hugh/.config/emacs/dbus-mo-signal.el...
Wrote /home/hugh/.config/emacs/dbus-mo-signal.el
next-line: End of buffer
Mark set
Quit
Wrote /home/hugh/.config/emacs/mo-traceback.txt
Quit
Checking spelling of GETMANANAGED...
Spell-checking suspended; use C-u M-$ to resume

Configured using:
 'configure --with-x-toolkit=lucid'

Configured features:
XAW3D XPM JPEG TIFF GIF PNG RSVG SOUND GPM DBUS GSETTINGS GLIB NOTIFY
INOTIFY ACL GNUTLS LIBXML2 FREETYPE HARFBUZZ M17N_FLT LIBOTF XFT ZLIB
TOOLKIT_SCROLL_BARS LUCID X11 XDBE XIM MODULES THREADS LIBSYSTEMD JSON
PDUMPER LCMS2 GMP

Important settings:
  value of $LANG: en_US.UTF-8
  locale-coding-system: utf-8-unix

Major mode: Emacs-Lisp

Minor modes in effect:
  pdf-occur-global-minor-mode: t
  global-magit-file-mode: t
  magit-file-mode: t
  magit-auto-revert-mode: t
  global-git-commit-mode: t
  async-bytecomp-package-mode: t
  ggtags-navigation-mode: t
  desktop-save-mode: t
  which-key-mode: t
  hungry-delete-mode: t
  paredit-mode: t
  amx-mode: t
  ivy-mode: t
  winner-mode: t
  shell-dirtrack-mode: t
  save-place-mode: t
  global-edit-server-edit-mode: t
  auto-insert-mode: t
  override-global-mode: t
  straight-use-package-mode: t
  straight-package-neutering-mode: t
  tooltip-mode: t
  global-eldoc-mode: t
  eldoc-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  menu-bar-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  column-number-mode: t
  line-number-mode: t
  transient-mark-mode: t
  abbrev-mode: t

Load-path shadows:
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ox hides /home/hugh/.config/emacs/straight/build/org/ox
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ox-texinfo hides /home/hugh/.config/emacs/straight/build/org/ox-texinfo
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ox-publish hides /home/hugh/.config/emacs/straight/build/org/ox-publish
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ox-org hides /home/hugh/.config/emacs/straight/build/org/ox-org
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ox-odt hides /home/hugh/.config/emacs/straight/build/org/ox-odt
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ox-md hides /home/hugh/.config/emacs/straight/build/org/ox-md
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ox-man hides /home/hugh/.config/emacs/straight/build/org/ox-man
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ox-latex hides /home/hugh/.config/emacs/straight/build/org/ox-latex
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ox-icalendar hides /home/hugh/.config/emacs/straight/build/org/ox-icalendar
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ox-html hides /home/hugh/.config/emacs/straight/build/org/ox-html
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ox-beamer hides /home/hugh/.config/emacs/straight/build/org/ox-beamer
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ox-ascii hides /home/hugh/.config/emacs/straight/build/org/ox-ascii
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org hides /home/hugh/.config/emacs/straight/build/org/org
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-timer hides /home/hugh/.config/emacs/straight/build/org/org-timer
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-tempo hides /home/hugh/.config/emacs/straight/build/org/org-tempo
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-table hides /home/hugh/.config/emacs/straight/build/org/org-table
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-src hides /home/hugh/.config/emacs/straight/build/org/org-src
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-refile hides /home/hugh/.config/emacs/straight/build/org/org-refile
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-protocol hides /home/hugh/.config/emacs/straight/build/org/org-protocol
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-plot hides /home/hugh/.config/emacs/straight/build/org/org-plot
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-pcomplete hides /home/hugh/.config/emacs/straight/build/org/org-pcomplete
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-num hides /home/hugh/.config/emacs/straight/build/org/org-num
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-mouse hides /home/hugh/.config/emacs/straight/build/org/org-mouse
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-mobile hides /home/hugh/.config/emacs/straight/build/org/org-mobile
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-macs hides /home/hugh/.config/emacs/straight/build/org/org-macs
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-macro hides /home/hugh/.config/emacs/straight/build/org/org-macro
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-list hides /home/hugh/.config/emacs/straight/build/org/org-list
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-lint hides /home/hugh/.config/emacs/straight/build/org/org-lint
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-keys hides /home/hugh/.config/emacs/straight/build/org/org-keys
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-inlinetask hides /home/hugh/.config/emacs/straight/build/org/org-inlinetask
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-indent hides /home/hugh/.config/emacs/straight/build/org/org-indent
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-id hides /home/hugh/.config/emacs/straight/build/org/org-id
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-habit hides /home/hugh/.config/emacs/straight/build/org/org-habit
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-goto hides /home/hugh/.config/emacs/straight/build/org/org-goto
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-footnote hides /home/hugh/.config/emacs/straight/build/org/org-footnote
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-feed hides /home/hugh/.config/emacs/straight/build/org/org-feed
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-faces hides /home/hugh/.config/emacs/straight/build/org/org-faces
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-entities hides /home/hugh/.config/emacs/straight/build/org/org-entities
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-element hides /home/hugh/.config/emacs/straight/build/org/org-element
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-duration hides /home/hugh/.config/emacs/straight/build/org/org-duration
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-datetree hides /home/hugh/.config/emacs/straight/build/org/org-datetree
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-ctags hides /home/hugh/.config/emacs/straight/build/org/org-ctags
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-crypt hides /home/hugh/.config/emacs/straight/build/org/org-crypt
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-compat hides /home/hugh/.config/emacs/straight/build/org/org-compat
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-colview hides /home/hugh/.config/emacs/straight/build/org/org-colview
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-clock hides /home/hugh/.config/emacs/straight/build/org/org-clock
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-capture hides /home/hugh/.config/emacs/straight/build/org/org-capture
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-attach hides /home/hugh/.config/emacs/straight/build/org/org-attach
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-attach-git hides /home/hugh/.config/emacs/straight/build/org/org-attach-git
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-archive hides /home/hugh/.config/emacs/straight/build/org/org-archive
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-agenda hides /home/hugh/.config/emacs/straight/build/org/org-agenda
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ol hides /home/hugh/.config/emacs/straight/build/org/ol
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ol-w3m hides /home/hugh/.config/emacs/straight/build/org/ol-w3m
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ol-rmail hides /home/hugh/.config/emacs/straight/build/org/ol-rmail
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ol-mhe hides /home/hugh/.config/emacs/straight/build/org/ol-mhe
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ol-irc hides /home/hugh/.config/emacs/straight/build/org/ol-irc
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ol-info hides /home/hugh/.config/emacs/straight/build/org/ol-info
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ol-gnus hides /home/hugh/.config/emacs/straight/build/org/ol-gnus
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ol-eww hides /home/hugh/.config/emacs/straight/build/org/ol-eww
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ol-eshell hides /home/hugh/.config/emacs/straight/build/org/ol-eshell
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ol-docview hides /home/hugh/.config/emacs/straight/build/org/ol-docview
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ol-bibtex hides /home/hugh/.config/emacs/straight/build/org/ol-bibtex
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ol-bbdb hides /home/hugh/.config/emacs/straight/build/org/ol-bbdb
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob hides /home/hugh/.config/emacs/straight/build/org/ob
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-vala hides /home/hugh/.config/emacs/straight/build/org/ob-vala
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-tangle hides /home/hugh/.config/emacs/straight/build/org/ob-tangle
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-table hides /home/hugh/.config/emacs/straight/build/org/ob-table
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-stan hides /home/hugh/.config/emacs/straight/build/org/ob-stan
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-sqlite hides /home/hugh/.config/emacs/straight/build/org/ob-sqlite
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-sql hides /home/hugh/.config/emacs/straight/build/org/ob-sql
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-shen hides /home/hugh/.config/emacs/straight/build/org/ob-shen
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-shell hides /home/hugh/.config/emacs/straight/build/org/ob-shell
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-sed hides /home/hugh/.config/emacs/straight/build/org/ob-sed
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-screen hides /home/hugh/.config/emacs/straight/build/org/ob-screen
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-scheme hides /home/hugh/.config/emacs/straight/build/org/ob-scheme
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-sass hides /home/hugh/.config/emacs/straight/build/org/ob-sass
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-ruby hides /home/hugh/.config/emacs/straight/build/org/ob-ruby
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-ref hides /home/hugh/.config/emacs/straight/build/org/ob-ref
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-python hides /home/hugh/.config/emacs/straight/build/org/ob-python
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-processing hides /home/hugh/.config/emacs/straight/build/org/ob-processing
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-plantuml hides /home/hugh/.config/emacs/straight/build/org/ob-plantuml
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-picolisp hides /home/hugh/.config/emacs/straight/build/org/ob-picolisp
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-perl hides /home/hugh/.config/emacs/straight/build/org/ob-perl
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-org hides /home/hugh/.config/emacs/straight/build/org/ob-org
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-octave hides /home/hugh/.config/emacs/straight/build/org/ob-octave
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-ocaml hides /home/hugh/.config/emacs/straight/build/org/ob-ocaml
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-mscgen hides /home/hugh/.config/emacs/straight/build/org/ob-mscgen
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-maxima hides /home/hugh/.config/emacs/straight/build/org/ob-maxima
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-matlab hides /home/hugh/.config/emacs/straight/build/org/ob-matlab
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-makefile hides /home/hugh/.config/emacs/straight/build/org/ob-makefile
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-lua hides /home/hugh/.config/emacs/straight/build/org/ob-lua
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-lob hides /home/hugh/.config/emacs/straight/build/org/ob-lob
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-lisp hides /home/hugh/.config/emacs/straight/build/org/ob-lisp
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-lilypond hides /home/hugh/.config/emacs/straight/build/org/ob-lilypond
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-ledger hides /home/hugh/.config/emacs/straight/build/org/ob-ledger
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-latex hides /home/hugh/.config/emacs/straight/build/org/ob-latex
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-js hides /home/hugh/.config/emacs/straight/build/org/ob-js
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-java hides /home/hugh/.config/emacs/straight/build/org/ob-java
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-io hides /home/hugh/.config/emacs/straight/build/org/ob-io
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-hledger hides /home/hugh/.config/emacs/straight/build/org/ob-hledger
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-haskell hides /home/hugh/.config/emacs/straight/build/org/ob-haskell
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-groovy hides /home/hugh/.config/emacs/straight/build/org/ob-groovy
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-gnuplot hides /home/hugh/.config/emacs/straight/build/org/ob-gnuplot
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-fortran hides /home/hugh/.config/emacs/straight/build/org/ob-fortran
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-forth hides /home/hugh/.config/emacs/straight/build/org/ob-forth
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-exp hides /home/hugh/.config/emacs/straight/build/org/ob-exp
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-eval hides /home/hugh/.config/emacs/straight/build/org/ob-eval
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-eshell hides /home/hugh/.config/emacs/straight/build/org/ob-eshell
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-emacs-lisp hides /home/hugh/.config/emacs/straight/build/org/ob-emacs-lisp
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-ebnf hides /home/hugh/.config/emacs/straight/build/org/ob-ebnf
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-dot hides /home/hugh/.config/emacs/straight/build/org/ob-dot
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-ditaa hides /home/hugh/.config/emacs/straight/build/org/ob-ditaa
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-css hides /home/hugh/.config/emacs/straight/build/org/ob-css
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-core hides /home/hugh/.config/emacs/straight/build/org/ob-core
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-coq hides /home/hugh/.config/emacs/straight/build/org/ob-coq
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-comint hides /home/hugh/.config/emacs/straight/build/org/ob-comint
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-clojure hides /home/hugh/.config/emacs/straight/build/org/ob-clojure
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-calc hides /home/hugh/.config/emacs/straight/build/org/ob-calc
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-awk hides /home/hugh/.config/emacs/straight/build/org/ob-awk
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-asymptote hides /home/hugh/.config/emacs/straight/build/org/ob-asymptote
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-abc hides /home/hugh/.config/emacs/straight/build/org/ob-abc
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-R hides /home/hugh/.config/emacs/straight/build/org/ob-R
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-J hides /home/hugh/.config/emacs/straight/build/org/ob-J
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-C hides /home/hugh/.config/emacs/straight/build/org/ob-C
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-loaddefs hides /home/hugh/.config/emacs/straight/build/org/org-loaddefs
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-install hides /home/hugh/.config/emacs/straight/build/org/org-install
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ox-texinfo hides /usr/local/share/emacs/27.1/lisp/org/ox-texinfo
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ox-publish hides /usr/local/share/emacs/27.1/lisp/org/ox-publish
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ox-org hides /usr/local/share/emacs/27.1/lisp/org/ox-org
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ox-odt hides /usr/local/share/emacs/27.1/lisp/org/ox-odt
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ox-md hides /usr/local/share/emacs/27.1/lisp/org/ox-md
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ox-man hides /usr/local/share/emacs/27.1/lisp/org/ox-man
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ox-latex hides /usr/local/share/emacs/27.1/lisp/org/ox-latex
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ox-icalendar hides /usr/local/share/emacs/27.1/lisp/org/ox-icalendar
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ox-html hides /usr/local/share/emacs/27.1/lisp/org/ox-html
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ox hides /usr/local/share/emacs/27.1/lisp/org/ox
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ox-beamer hides /usr/local/share/emacs/27.1/lisp/org/ox-beamer
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ox-ascii hides /usr/local/share/emacs/27.1/lisp/org/ox-ascii
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-timer hides /usr/local/share/emacs/27.1/lisp/org/org-timer
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-tempo hides /usr/local/share/emacs/27.1/lisp/org/org-tempo
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-table hides /usr/local/share/emacs/27.1/lisp/org/org-table
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-src hides /usr/local/share/emacs/27.1/lisp/org/org-src
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-protocol hides /usr/local/share/emacs/27.1/lisp/org/org-protocol
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-plot hides /usr/local/share/emacs/27.1/lisp/org/org-plot
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-pcomplete hides /usr/local/share/emacs/27.1/lisp/org/org-pcomplete
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-num hides /usr/local/share/emacs/27.1/lisp/org/org-num
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-mouse hides /usr/local/share/emacs/27.1/lisp/org/org-mouse
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-mobile hides /usr/local/share/emacs/27.1/lisp/org/org-mobile
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-macs hides /usr/local/share/emacs/27.1/lisp/org/org-macs
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-macro hides /usr/local/share/emacs/27.1/lisp/org/org-macro
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-list hides /usr/local/share/emacs/27.1/lisp/org/org-list
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-lint hides /usr/local/share/emacs/27.1/lisp/org/org-lint
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-keys hides /usr/local/share/emacs/27.1/lisp/org/org-keys
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-inlinetask hides /usr/local/share/emacs/27.1/lisp/org/org-inlinetask
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-indent hides /usr/local/share/emacs/27.1/lisp/org/org-indent
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-id hides /usr/local/share/emacs/27.1/lisp/org/org-id
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-habit hides /usr/local/share/emacs/27.1/lisp/org/org-habit
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-goto hides /usr/local/share/emacs/27.1/lisp/org/org-goto
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-footnote hides /usr/local/share/emacs/27.1/lisp/org/org-footnote
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-feed hides /usr/local/share/emacs/27.1/lisp/org/org-feed
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-faces hides /usr/local/share/emacs/27.1/lisp/org/org-faces
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-entities hides /usr/local/share/emacs/27.1/lisp/org/org-entities
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-element hides /usr/local/share/emacs/27.1/lisp/org/org-element
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org hides /usr/local/share/emacs/27.1/lisp/org/org
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-duration hides /usr/local/share/emacs/27.1/lisp/org/org-duration
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-datetree hides /usr/local/share/emacs/27.1/lisp/org/org-datetree
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-ctags hides /usr/local/share/emacs/27.1/lisp/org/org-ctags
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-crypt hides /usr/local/share/emacs/27.1/lisp/org/org-crypt
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-compat hides /usr/local/share/emacs/27.1/lisp/org/org-compat
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-colview hides /usr/local/share/emacs/27.1/lisp/org/org-colview
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-clock hides /usr/local/share/emacs/27.1/lisp/org/org-clock
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-capture hides /usr/local/share/emacs/27.1/lisp/org/org-capture
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-attach-git hides /usr/local/share/emacs/27.1/lisp/org/org-attach-git
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-attach hides /usr/local/share/emacs/27.1/lisp/org/org-attach
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-archive hides /usr/local/share/emacs/27.1/lisp/org/org-archive
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-agenda hides /usr/local/share/emacs/27.1/lisp/org/org-agenda
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ol-w3m hides /usr/local/share/emacs/27.1/lisp/org/ol-w3m
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ol-rmail hides /usr/local/share/emacs/27.1/lisp/org/ol-rmail
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ol-mhe hides /usr/local/share/emacs/27.1/lisp/org/ol-mhe
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ol-irc hides /usr/local/share/emacs/27.1/lisp/org/ol-irc
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ol-info hides /usr/local/share/emacs/27.1/lisp/org/ol-info
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ol-gnus hides /usr/local/share/emacs/27.1/lisp/org/ol-gnus
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ol-eww hides /usr/local/share/emacs/27.1/lisp/org/ol-eww
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ol-eshell hides /usr/local/share/emacs/27.1/lisp/org/ol-eshell
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ol hides /usr/local/share/emacs/27.1/lisp/org/ol
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ol-docview hides /usr/local/share/emacs/27.1/lisp/org/ol-docview
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ol-bibtex hides /usr/local/share/emacs/27.1/lisp/org/ol-bibtex
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ol-bbdb hides /usr/local/share/emacs/27.1/lisp/org/ol-bbdb
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-vala hides /usr/local/share/emacs/27.1/lisp/org/ob-vala
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-tangle hides /usr/local/share/emacs/27.1/lisp/org/ob-tangle
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-table hides /usr/local/share/emacs/27.1/lisp/org/ob-table
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-stan hides /usr/local/share/emacs/27.1/lisp/org/ob-stan
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-sqlite hides /usr/local/share/emacs/27.1/lisp/org/ob-sqlite
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-sql hides /usr/local/share/emacs/27.1/lisp/org/ob-sql
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-shen hides /usr/local/share/emacs/27.1/lisp/org/ob-shen
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-shell hides /usr/local/share/emacs/27.1/lisp/org/ob-shell
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-sed hides /usr/local/share/emacs/27.1/lisp/org/ob-sed
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-screen hides /usr/local/share/emacs/27.1/lisp/org/ob-screen
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-scheme hides /usr/local/share/emacs/27.1/lisp/org/ob-scheme
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-sass hides /usr/local/share/emacs/27.1/lisp/org/ob-sass
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-ruby hides /usr/local/share/emacs/27.1/lisp/org/ob-ruby
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-R hides /usr/local/share/emacs/27.1/lisp/org/ob-R
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-ref hides /usr/local/share/emacs/27.1/lisp/org/ob-ref
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-python hides /usr/local/share/emacs/27.1/lisp/org/ob-python
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-processing hides /usr/local/share/emacs/27.1/lisp/org/ob-processing
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-plantuml hides /usr/local/share/emacs/27.1/lisp/org/ob-plantuml
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-picolisp hides /usr/local/share/emacs/27.1/lisp/org/ob-picolisp
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-perl hides /usr/local/share/emacs/27.1/lisp/org/ob-perl
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-org hides /usr/local/share/emacs/27.1/lisp/org/ob-org
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-octave hides /usr/local/share/emacs/27.1/lisp/org/ob-octave
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-ocaml hides /usr/local/share/emacs/27.1/lisp/org/ob-ocaml
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-mscgen hides /usr/local/share/emacs/27.1/lisp/org/ob-mscgen
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-maxima hides /usr/local/share/emacs/27.1/lisp/org/ob-maxima
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-matlab hides /usr/local/share/emacs/27.1/lisp/org/ob-matlab
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-makefile hides /usr/local/share/emacs/27.1/lisp/org/ob-makefile
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-lua hides /usr/local/share/emacs/27.1/lisp/org/ob-lua
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-lob hides /usr/local/share/emacs/27.1/lisp/org/ob-lob
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-lisp hides /usr/local/share/emacs/27.1/lisp/org/ob-lisp
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-lilypond hides /usr/local/share/emacs/27.1/lisp/org/ob-lilypond
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-ledger hides /usr/local/share/emacs/27.1/lisp/org/ob-ledger
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-latex hides /usr/local/share/emacs/27.1/lisp/org/ob-latex
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-js hides /usr/local/share/emacs/27.1/lisp/org/ob-js
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-J hides /usr/local/share/emacs/27.1/lisp/org/ob-J
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-java hides /usr/local/share/emacs/27.1/lisp/org/ob-java
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-io hides /usr/local/share/emacs/27.1/lisp/org/ob-io
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-hledger hides /usr/local/share/emacs/27.1/lisp/org/ob-hledger
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-haskell hides /usr/local/share/emacs/27.1/lisp/org/ob-haskell
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-groovy hides /usr/local/share/emacs/27.1/lisp/org/ob-groovy
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-gnuplot hides /usr/local/share/emacs/27.1/lisp/org/ob-gnuplot
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-fortran hides /usr/local/share/emacs/27.1/lisp/org/ob-fortran
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-forth hides /usr/local/share/emacs/27.1/lisp/org/ob-forth
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-exp hides /usr/local/share/emacs/27.1/lisp/org/ob-exp
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-eval hides /usr/local/share/emacs/27.1/lisp/org/ob-eval
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-eshell hides /usr/local/share/emacs/27.1/lisp/org/ob-eshell
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-emacs-lisp hides /usr/local/share/emacs/27.1/lisp/org/ob-emacs-lisp
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob hides /usr/local/share/emacs/27.1/lisp/org/ob
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-ebnf hides /usr/local/share/emacs/27.1/lisp/org/ob-ebnf
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-dot hides /usr/local/share/emacs/27.1/lisp/org/ob-dot
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-ditaa hides /usr/local/share/emacs/27.1/lisp/org/ob-ditaa
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-css hides /usr/local/share/emacs/27.1/lisp/org/ob-css
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-core hides /usr/local/share/emacs/27.1/lisp/org/ob-core
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-coq hides /usr/local/share/emacs/27.1/lisp/org/ob-coq
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-comint hides /usr/local/share/emacs/27.1/lisp/org/ob-comint
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-clojure hides /usr/local/share/emacs/27.1/lisp/org/ob-clojure
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-C hides /usr/local/share/emacs/27.1/lisp/org/ob-C
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-calc hides /usr/local/share/emacs/27.1/lisp/org/ob-calc
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-awk hides /usr/local/share/emacs/27.1/lisp/org/ob-awk
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-asymptote hides /usr/local/share/emacs/27.1/lisp/org/ob-asymptote
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-abc hides /usr/local/share/emacs/27.1/lisp/org/ob-abc
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-loaddefs hides /usr/local/share/emacs/27.1/lisp/org/org-loaddefs
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-install hides /usr/local/share/emacs/27.1/lisp/org/org-install
/home/hugh/.config/emacs/straight/build/let-alist/let-alist hides /usr/local/share/emacs/27.1/lisp/emacs-lisp/let-alist

Features:
(shadow emacsbug sh-script smie python tramp-cmds rng-xsd xsd-regexp
rng-cmpct rng-nxml rng-valid nxml-mode nxml-outln nxml-rap sgml-mode
company-tng company transpose-frame autoload lisp-mnt descr-text
gl-bluez-gatt dabbrev quail org-eldoc ol-eww ol-rmail ol-mhe ol-irc
ol-info ol-gnus nnir ol-docview ol-bibtex bibtex ol-bbdb ol-w3m pdf-sync
pdf-outline pdf-links pdf-history pdf-occur ibuf-ext pdf-isearch
let-alist pdf-annot tablist tablist-filter semantic/wisent/comp
semantic/wisent semantic/wisent/wisent semantic/util-modes semantic/util
semantic semantic/tag semantic/lex semantic/fw mode-local cedet pdf-misc
pdf-tools pdf-view pdf-cache pdf-info tq pdf-util rect epa-mail epa-file
mailalias face-remap tabify man view timezone gnutls url-http url-gw
url-cache url-auth eww mm-url magit-extras magit-bookmark
magit-submodule magit-obsolete magit-blame magit-stash magit-reflog
magit-bisect magit-push magit-pull magit-fetch magit-clone magit-remote
magit-commit magit-sequence magit-notes magit-worktree magit-tag
magit-merge magit-branch magit-reset magit-files magit-refs magit-status
magit package url-handlers magit-repos magit-apply magit-wip magit-log
which-func imenu magit-diff smerge-mode diff magit-core magit-autorevert
autorevert magit-margin magit-transient magit-process magit-mode
git-commit transient magit-git magit-section magit-utils crm log-edit
pcvs-util add-log with-editor async-bytecomp async tmm eieio-opt
speedbar sb-image ezimage dframe dbus-bluetooth dbus-formatters
dbus-inspector tree-mode flyspell repeat bug-reference macrostep-c
cmacexp macrostep ggtags etags fileloop ewoc cc-mode cc-fonts cc-guess
cc-menus cc-cmds cc-styles cc-align cc-engine cc-vars cc-defs pulse xref
project debug backtrace dired-aux tramp-cache tramp-sh tramp
tramp-loaddefs trampver tramp-integration files-x tramp-compat ls-lisp
recentf tree-widget visual-fill-column sort gnus-cite smiley shr-color
qp mm-archive mail-extr gnus-art mm-uu mml2015 mm-view mml-smime smime
dig gnus-sum gnus-group gnus-undo gnus-start gnus-cloud nnimap nnmail
mail-source utf7 netrc nnoo parse-time iso8601 gnus-spec gnus-int
gnus-range gnus-win gnus nnheader iso-transl csv executable disp-table
network-stream nsm cl-print ace-window avy rcirc help-fns radix-tree
persistent-soft list-utils pcache eieio-compat eieio-base font-utils
unicode-fonts misearch multi-isearch two-column vc-git diff-mode
elfeed-org elfeed-show elfeed-search bookmark elfeed-csv elfeed
elfeed-curl url url-proxy url-expand url-methods url-history mailcap
elfeed-log elfeed-db elfeed-lib url-queue xml-query mu4e mu4e-org
mu4e-main mu4e-view mu4e-headers mu4e-compose mu4e-context mu4e-draft
mu4e-actions ido rfc2368 smtpmail sendmail mu4e-mark mu4e-proc
mu4e-utils doc-view jka-compr image-mode exif mu4e-lists mu4e-message
flow-fill ox-reveal desktop frameset ox-hugo org-refile ffap thingatpt
ox-blackfriday ox-odt rng-loc rng-uri rng-parse rng-match rng-dt
rng-util rng-pttrn nxml-parse nxml-ns nxml-enc xmltok nxml-util ox-md
ox-html table ox-beamer ox-latex ox-ascii ox-publish ox org-element
avl-tree generator org org-macro org-footnote org-pcomplete org-list
org-faces org-entities noutline outline ob-gnuplot ob-dot ob-ditaa
ob-shell ob-awk ob-calc calc-store calc-trail calc-ext calc
calc-loaddefs calc-macs ob ob-tangle org-src ob-ref ob-lob ob-table
ob-exp ob-comint ob-emacs-lisp ob-core ob-eval org-table ol org-keys
org-compat org-macs org-loaddefs find-func cal-menu calendar
cal-loaddefs mule-util hl-line mu4e-vars message rmc format-spec rfc822
mml mml-sec epa derived epg epg-config gnus-util rmail rmail-loaddefs
time-date mm-decode mm-bodies mm-encode mail-parse rfc2231 rfc2047
rfc2045 mm-util ietf-drums mail-prsvr mailabbrev mail-utils gmm-utils
mailheader mu4e-meta which-key server hungry-delete paredit ivy-posframe
posframe ivy-hydra amx ivy flx delsel ivy-faces ivy-overlay colir color
winner url-privacy filenotify slime-company-autoloads slime-autoloads
macrostep-autoloads shr text-property-search url-cookie url-domsuf
url-util url-parse auth-source eieio eieio-core eieio-loaddefs
password-cache url-vars puny svg dom zenburn-theme
zenburn-theme-autoloads which-key-autoloads visual-fill-column-autoloads
unicode-fonts-autoloads ucs-utils-autoloads font-utils-autoloads
persistent-soft-autoloads list-utils-autoloads cl pcache-autoloads
tree-mode-autoloads transpose-frame-autoloads tex-mode shell pcomplete
smtpmail-multi-autoloads smart-mode-line-respectful-theme
smart-mode-line rich-minority smart-mode-line-autoloads
rich-minority-autoloads saveplace ripgrep-autoloads restclient-autoloads
pdf-tools-autoloads tablist-autoloads paredit-autoloads
ox-reveal-autoloads ox-hugo-autoloads org-gcal-autoloads
persist-autoloads request-deferred-autoloads deferred-autoloads
request-autoloads org-caldav-autoloads org-plus-contrib-autoloads
magit-svn-autoloads json-mode-autoloads json-snatcher-autoloads
json-reformat-autoloads ix grapnel ix-autoloads grapnel-autoloads
ivy-posframe-autoloads posframe-autoloads ivy-hydra-autoloads ispell
ielm pp ibuffer ibuffer-loaddefs hyperbole-autoloads kotl-autoloads
hydra lv hydra-autoloads lv-autoloads hungry-delete-autoloads
gnuplot-autoloads ggtags-autoloads geiser-autoloads flx-autoloads
forge-autoloads markdown-mode-autoloads magit-autoloads
git-commit-autoloads with-editor-autoloads transient-autoloads
async-autoloads ghub-autoloads treepy-autoloads let-alist-autoloads
closql-autoloads emacsql-sqlite-autoloads emacsql-autoloads
esup-autoloads elpher-autoloads emojify apropos tar-mode arc-mode
archive-mode pcase json map ht emojify-autoloads ht-autoloads
emms-autoloads elfeed-org-autoloads org-autoloads org-version
elfeed-autoloads edit-server advice edit-server-autoloads
dmenu-autoloads deft-autoloads dired-x use-package-ensure
dired-subtree-autoloads dired-hacks-utils-autoloads diminish
diminish-autoloads dictionary-autoloads link-autoloads
connection-autoloads delight-autoloads deadgrep-autoloads
spinner-autoloads dbus-inspector-autoloads dash-functional
dash-functional-autoloads csv-autoloads counsel-projectile-autoloads
projectile-autoloads pkg-info-autoloads epl-autoloads counsel-autoloads
swiper-autoloads ivy-autoloads company-quickhelp-autoloads
pos-tip-autoloads company-autoloads use-package-diminish autoinsert
amx-autoloads alert log4e rx notifications dbus xml gntp alert-autoloads
log4e-autoloads gntp-autoloads ag vc-svn compile comint ansi-color ring
find-dired s dash dired dired-loaddefs ag-autoloads s-autoloads
dash-autoloads adaptive-wrap adaptive-wrap-autoloads
ace-window-autoloads avy-autoloads finder-inf edmacro kmacro browse-url
cus-edit cus-start cus-load wid-edit use-package-bind-key bind-key
easy-mmode cl-seq use-package-core use-package-autoloads
bind-key-autoloads straight-autoloads info cl-extra help-mode easymenu
seq byte-opt straight subr-x cl-macs gv cl-loaddefs cl-lib bytecomp
byte-compile cconv early-init tooltip eldoc electric uniquify ediff-hook
vc-hooks lisp-float-type mwheel term/x-win x-win term/common-win x-dnd
tool-bar dnd fontset image regexp-opt fringe tabulated-list replace
newcomment text-mode elisp-mode lisp-mode prog-mode register page
tab-bar menu-bar rfn-eshadow isearch timer select scroll-bar mouse
jit-lock font-lock syntax facemenu font-core term/tty-colors frame
minibuffer cl-generic cham georgian utf-8-lang misc-lang vietnamese
tibetan thai tai-viet lao korean japanese eucjp-ms cp51932 hebrew greek
romanian slovak czech european ethiopic indian cyrillic chinese
composite charscript charprop case-table epa-hook jka-cmpr-hook help
simple abbrev obarray cl-preloaded nadvice loaddefs button faces
cus-face macroexp files text-properties overlay sha1 md5 base64 format
env code-pages mule custom widget hashtable-print-readable backquote
threads dbusbind inotify lcms2 dynamic-setting system-font-setting
font-render-setting x-toolkit x multi-tty make-network-process emacs)

Memory information:
((conses 16 2360901 225902)
 (symbols 48 72629 1)
 (strings 32 326704 30447)
 (string-bytes 1 11354397)
 (vectors 16 124188)
 (vector-slots 8 2364465 244670)
 (floats 8 5611 2273)
 (intervals 56 233388 7495)
 (buffers 1000 242))

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

* bug#43251: 27.1; DBus signals error when GetManagedObjects received while waiting for dbus-call-method
  2020-09-07  0:11 bug#43251: 27.1; DBus signals error when GetManagedObjects received while waiting for dbus-call-method Hugh Daschbach
@ 2020-09-07  7:28 ` Michael Albinus
  2020-09-28 23:36   ` Hugh Daschbach
  0 siblings, 1 reply; 4+ messages in thread
From: Michael Albinus @ 2020-09-07  7:28 UTC (permalink / raw)
  To: Hugh Daschbach; +Cc: 43251

Hugh Daschbach <hugh@ccss.com> writes:

Hi Hugh,

> After exporting a property on an interface, that property will be
> described, correctly, when a GetManagedObjects request is received from
> another program in the system.
>
> But if that GetManagedObjects method call is received while a
> dbus-call-method request is waiting for a reply message, processing the
> GetManagedObjects request signals an error.

Thanks, I will investigate.

(And I shall extend dbus-tests.el for more use cases. I've started
already last days in the master branch.)

> Thanks,
> Hugh

Best regards, Michael.





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

* bug#43251: 27.1; DBus signals error when GetManagedObjects received while waiting for dbus-call-method
  2020-09-07  7:28 ` Michael Albinus
@ 2020-09-28 23:36   ` Hugh Daschbach
  2020-09-29 12:15     ` Michael Albinus
  0 siblings, 1 reply; 4+ messages in thread
From: Hugh Daschbach @ 2020-09-28 23:36 UTC (permalink / raw)
  To: Michael Albinus; +Cc: 43251

[-- Attachment #1: Type: text/plain, Size: 441 bytes --]


Michael Albinus writes:

> Hugh Daschbach <hugh@ccss.com> writes:
>
> Hi Hugh,
>
>> But if that GetManagedObjects method call is received while a
>> dbus-call-method request is waiting for a reply message, processing the
>> GetManagedObjects request signals an error.
>
> Thanks, I will investigate.

I believe this issue is fixed on master.  The attached test fails on
27.1 and does not fail on master.

Feel free to close.

Thanks,
Hugh


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: Test case for dbus-call-method reentry. --]
[-- Type: text/x-patch, Size: 2074 bytes --]

From 51eabb23d839827beccad86ba3755d1fc32c20b3 Mon Sep 17 00:00:00 2001
From: Hugh Daschbach <hdasch@fastmail.com>
Date: Mon, 28 Sep 2020 14:34:54 -0700
Subject: [PATCH 4/4] Add D-Bus method call reentry test.

* test/lisp/net/dbus-tests.el (dbus--tests-method-reentry-handler): New defun.
(dbus-test04-method-reentry): New test.
---
 test/lisp/net/dbus-tests.el | 33 +++++++++++++++++++++++++++++++++
 1 file changed, 33 insertions(+)

diff --git a/test/lisp/net/dbus-tests.el b/test/lisp/net/dbus-tests.el
index 308f22eb6cc..a4305b5942a 100644
--- a/test/lisp/net/dbus-tests.el
+++ b/test/lisp/net/dbus-tests.el
@@ -581,6 +581,39 @@ dbus-test04-register-method
     ;; Cleanup.
     (dbus-unregister-service :session dbus--test-service)))
 
+(defun dbus--test-method-reentry-handler (&rest args)
+  "Method handler for `dbus-test04-method-reentry'."
+  (dbus-get-all-managed-objects :session dbus--test-service dbus--test-path)
+  42)
+
+(ert-deftest dbus-test04-method-reentry ()
+  "Check receiving method call while awaiting response.
+Ensure that incoming method calls are handled when call to `dbus-call-method'
+is in progress."
+  (skip-unless dbus--test-enabled-session-bus)
+  (dbus-ignore-errors (dbus-unregister-service :session dbus--test-service))
+
+  (unwind-protect
+      (let ((method "Rentry"))
+        (should
+         (equal
+          (dbus-register-method
+           :session dbus--test-service dbus--test-path
+           dbus--test-interface method #'dbus--test-method-reentry-handler)
+          `((:method :session ,dbus--test-interface ,method)
+            (,dbus--test-service ,dbus--test-path
+             dbus--test-method-reentry-handler))))
+
+        (should
+         (=
+          (dbus-call-method
+           :session dbus--test-service dbus--test-path
+           dbus--test-interface method)
+          42)))
+
+    ;; Cleanup.
+    (dbus-unregister-service :session dbus--test-service)))
+
 (ert-deftest dbus-test04-call-method-timeout ()
   "Verify `dbus-call-method' request timeout."
   :tags '(:expensive-test)
-- 
2.28.0


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

* bug#43251: 27.1; DBus signals error when GetManagedObjects received while waiting for dbus-call-method
  2020-09-28 23:36   ` Hugh Daschbach
@ 2020-09-29 12:15     ` Michael Albinus
  0 siblings, 0 replies; 4+ messages in thread
From: Michael Albinus @ 2020-09-29 12:15 UTC (permalink / raw)
  To: Hugh Daschbach; +Cc: 43251

Version: 28.1

Hugh Daschbach <hugh@ccss.com> writes:

Hi Hugh,

> I believe this issue is fixed on master.  The attached test fails on
> 27.1 and does not fail on master.

Thanks. It was on my TODO list, but I wanted to finish the other work first.

> Feel free to close.

Closed. Btw, you can close bugs yourself. Just send a message to
<NNN-done@debbugs.gnu.org>, as I have done here in Cc.

> Thanks,
> Hugh

Best regards, Michael.





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

end of thread, other threads:[~2020-09-29 12:15 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-09-07  0:11 bug#43251: 27.1; DBus signals error when GetManagedObjects received while waiting for dbus-call-method Hugh Daschbach
2020-09-07  7:28 ` Michael Albinus
2020-09-28 23:36   ` Hugh Daschbach
2020-09-29 12:15     ` Michael Albinus

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).