all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
* dbus problem: "notifications-notify :on-action" stops working
@ 2012-02-27  9:47 Peter Münster
  2012-02-27 10:17 ` Michael Albinus
  0 siblings, 1 reply; 8+ messages in thread
From: Peter Münster @ 2012-02-27  9:47 UTC (permalink / raw)
  To: help-gnu-emacs

Hi,

Sometimes, the call-back function specified in ":on-action" of the
`notifications-notify' function is no more called and I have to restart
emacs to make it work again.

I was able (but not always) to reproduce this problem with this simple
test file:

--8<---------------cut here---------------start------------->8---
(require 'notifications)

(defun my-test-action (id ignore)
  (message "Success (id = %d)" id))

(defun my-test ()
  (interactive)
  (message "Begin test (id = %d)"
           (notifications-notify
            :title     "title"
            :timeout   30000
            :actions   '("key" "click here")
            :on-action 'my-test-action)))

(global-set-key [?\C-a] 'my-test)
(switch-to-buffer "*Messages*")
--8<---------------cut here---------------end--------------->8---

I save it in /tmp/init.el and start "emacs -Q -l /tmp/init.el". Then I
press about a dozen times "C-a" followed by a click on "click here".
Then I wait about 2-3 minutes and try it again: no more "Success".

Can others reproduce this behaviour?

Where could be the problem, and how could I debug it?

TIA for any help!
-- 
           Peter




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

* Re: dbus problem: "notifications-notify :on-action" stops working
  2012-02-27  9:47 dbus problem: "notifications-notify :on-action" stops working Peter Münster
@ 2012-02-27 10:17 ` Michael Albinus
  2012-02-27 11:00   ` Peter Münster
  0 siblings, 1 reply; 8+ messages in thread
From: Michael Albinus @ 2012-02-27 10:17 UTC (permalink / raw)
  To: Peter Münster; +Cc: help-gnu-emacs

Peter Münster <pmlists@free.fr> writes:

> Hi,

Hi,

> Can others reproduce this behaviour?

Which Emacs version are you using?

> Where could be the problem, and how could I debug it?

Setting `dbus-debug' to t is a starting point. If the resulting messages
are confusing you, you might run instead "dbus-monitor --session" in a
shell outside Emacs

> TIA for any help!

Best regards, Michael.



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

* Re: dbus problem: "notifications-notify :on-action" stops working
  2012-02-27 10:17 ` Michael Albinus
@ 2012-02-27 11:00   ` Peter Münster
  2012-02-27 20:49     ` Michael Albinus
  0 siblings, 1 reply; 8+ messages in thread
From: Peter Münster @ 2012-02-27 11:00 UTC (permalink / raw)
  To: help-gnu-emacs

On Mon, Feb 27 2012, Michael Albinus wrote:

> Which Emacs version are you using?

GNU Emacs 24.0.93.1 (x86_64-suse-linux-gnu, GTK+ Version 2.22.1) of 2012-02-24


> Setting `dbus-debug' to t is a starting point. If the resulting messages
> are confusing you, you might run instead "dbus-monitor --session" in a
> shell outside Emacs

Of course! I had forgotten dbus-debug...

Now I have 2 emacs sessions: one, where it's working as expected, and
another with the problem:

Here the output, where it's working:

--8<---------------cut here---------------start------------->8---
xd_retrieve_arg: u 2
xd_retrieve_arg: s key
xd_read_message_1: Event received: DBUS_MESSAGE_TYPE_SIGNAL 20 :1.278 /org/freedesktop/Notifications org.freedesktop.Notifications ActionInvoked (2 key)
xd_read_message_1: Event stored: (:session 4 20 :1.278 /org/freedesktop/Notifications org.freedesktop.Notifications ActionInvoked notifications-on-action-signal 2 key)
xd_retrieve_arg: u 2 [2 times]
xd_read_message_1: Event received: DBUS_MESSAGE_TYPE_SIGNAL 21 :1.278 /org/freedesktop/Notifications org.freedesktop.Notifications NotificationClosed (2 2)
xd_read_message_1: Event stored: (:session 4 21 :1.278 /org/freedesktop/Notifications org.freedesktop.Notifications NotificationClosed notifications-on-closed-signal 2 2)
--8<---------------cut here---------------end--------------->8---

Here the output with the problem:

--8<---------------cut here---------------start------------->8---
xd_retrieve_arg: u 4
xd_retrieve_arg: s hour
xd_read_message_1: Event received: DBUS_MESSAGE_TYPE_SIGNAL 38 :1.278 /org/freedesktop/Notifications org.freedesktop.Notifications ActionInvoked (4 hour)
xd_retrieve_arg: u 4
xd_retrieve_arg: u 2
xd_read_message_1: Event received: DBUS_MESSAGE_TYPE_SIGNAL 39 :1.278 /org/freedesktop/Notifications org.freedesktop.Notifications NotificationClosed (4 2)
--8<---------------cut here---------------end--------------->8---


When I call

--8<---------------cut here---------------start------------->8---
  (dbus-register-signal
   :session
   notifications-service
   notifications-path
   notifications-interface
   notifications-action-signal
   'notifications-on-action-signal)
--8<---------------cut here---------------end--------------->8---

in the second emacs session, the problem disappears for a while and then
comes back after a few minutes.

-- 
           Peter




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

* Re: dbus problem: "notifications-notify :on-action" stops working
  2012-02-27 11:00   ` Peter Münster
@ 2012-02-27 20:49     ` Michael Albinus
  2012-02-28  8:10       ` Peter Münster
  0 siblings, 1 reply; 8+ messages in thread
From: Michael Albinus @ 2012-02-27 20:49 UTC (permalink / raw)
  To: Peter Münster; +Cc: help-gnu-emacs

Peter Münster <pmlists@free.fr> writes:

Hi,

I've played a while with the recipe you gave the other mail. No problem.

Note, that I'm running Ubuntu 11.10.

> Now I have 2 emacs sessions: one, where it's working as expected, and
> another with the problem:
>
> Here the output, where it's working:
>
> xd_retrieve_arg: u 2
> xd_retrieve_arg: s key
> xd_read_message_1: Event received: DBUS_MESSAGE_TYPE_SIGNAL 20 :1.278 /org/freedesktop/Notifications org.freedesktop.Notifications ActionInvoked (2 key)
> xd_read_message_1: Event stored: (:session 4 20 :1.278 /org/freedesktop/Notifications org.freedesktop.Notifications ActionInvoked notifications-on-action-signal 2 key)
> xd_retrieve_arg: u 2 [2 times]
> xd_read_message_1: Event received: DBUS_MESSAGE_TYPE_SIGNAL 21 :1.278 /org/freedesktop/Notifications org.freedesktop.Notifications NotificationClosed (2 2)
> xd_read_message_1: Event stored: (:session 4 21 :1.278 /org/freedesktop/Notifications org.freedesktop.Notifications NotificationClosed notifications-on-closed-signal 2 2)
>
> Here the output with the problem:
>
> xd_retrieve_arg: u 4
> xd_retrieve_arg: s hour
> xd_read_message_1: Event received: DBUS_MESSAGE_TYPE_SIGNAL 38 :1.278 /org/freedesktop/Notifications org.freedesktop.Notifications ActionInvoked (4 hour)
> xd_retrieve_arg: u 4
> xd_retrieve_arg: u 2
> xd_read_message_1: Event received: DBUS_MESSAGE_TYPE_SIGNAL 39 :1.278 /org/freedesktop/Notifications org.freedesktop.Notifications NotificationClosed (4 2)

The difference is, that in the second case there is no "Event stored"
trace. That means, that the Emacs session does not feel responsible for
the incoming D-Bus event. No idea, why.

I've played also with two Emacs sessions in parallel, and there was no
problem. When I have typed C-a in both Emacs session, and I have pressed
the notification window, the "Success" message was visible in the Emacs
buffer where I have pressed the last C-a. That's acceptable.

Maybe you could replay your scenario, and let dbus-monitor run in
parallel. Please comment exactly what you have done (starting Emacs,
every keystroke), and mark the corresponding traces from
dbus-monitor. By this, we might be able to understand what happens.

Best regards, Michael.



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

* Re: dbus problem: "notifications-notify :on-action" stops working
  2012-02-27 20:49     ` Michael Albinus
@ 2012-02-28  8:10       ` Peter Münster
  2012-03-01 14:18         ` Michael Albinus
  0 siblings, 1 reply; 8+ messages in thread
From: Peter Münster @ 2012-02-28  8:10 UTC (permalink / raw)
  To: help-gnu-emacs

On Mon, Feb 27 2012, Michael Albinus wrote:

> Maybe you could replay your scenario, and let dbus-monitor run in
> parallel. Please comment exactly what you have done (starting Emacs,
> every keystroke), and mark the corresponding traces from
> dbus-monitor. By this, we might be able to understand what happens.

Hi Michael,

Yesterday evening, after a reboot of the system, I've started my normal
emacs session and "dbus-monitor --session" and "dbus-monitor --profile".
"--profile", because there are timestamps.

Sometimes, I've started another "emacs -Q -l /tmp/init.el" just to see,
if it works or not. Now, the problem appears again, at timestamp
"1330414472". Here the "*Messages*":

--8<---------------cut here---------------start------------->8---
Begin test (id = 23)
Success (id = 23)
Begin test (id = 24)
Success (id = 24)
Begin test (id = 25)
Success (id = 25)
Begin test (id = 26)
Success (id = 26)
Begin test (id = 27)
Success (id = 27)
Begin test (id = 28)
Success (id = 28)
Begin test (id = 4)
Begin test (id = 5)
--8<---------------cut here---------------end--------------->8---

The output of dbus-monitor is perhaps too big for usenet, so you can
find it here: http://pmrb.free.fr/tmp/dbus/



Another test:
I've restarted the 2 dbus-monitors, and also "emacs -Q -l /tmp/init.el".

I've added this to my init.el:

--8<---------------cut here---------------start------------->8---
(defun my-register-again ()
  (interactive)
  (dbus-register-signal
   :session
   notifications-service
   notifications-path
   notifications-interface
   notifications-action-signal
   'notifications-on-action-signal))

(global-set-key [?\C-b] 'my-register-again)
--8<---------------cut here---------------end--------------->8---


The results:

--8<---------------cut here---------------start------------->8---
Begin test (id = 11)
Success (id = 11)
Begin test (id = 12)
Success (id = 12)
Begin test (id = 13)
Success (id = 13)
Begin test (id = 14)
Success (id = 14)
Begin test (id = 15)
Success (id = 15)
##################### Here I've waited for some minutes.
Begin test (id = 3)
Begin test (id = 4)
Begin test (id = 5)
##################### Here I've pressed "C-b" !
Begin test (id = 6)
Success (id = 6)
Begin test (id = 7)
Success (id = 7)
Begin test (id = 8)
Success (id = 8)
Begin test (id = 9)
Success (id = 9)
##################### Here I've waited for some minutes.
Begin test (id = 1)
Begin test (id = 2)
Begin test (id = 3)
--8<---------------cut here---------------end--------------->8---

And here the dbus-output: http://pmrb.free.fr/tmp/dbus2/

I hope, that you have some time to look at this and can find what's
going on.

Thanks for your efforts,
-- 
           Peter




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

* Re: dbus problem: "notifications-notify :on-action" stops working
  2012-02-28  8:10       ` Peter Münster
@ 2012-03-01 14:18         ` Michael Albinus
  2012-03-04 21:10           ` Peter Münster
  0 siblings, 1 reply; 8+ messages in thread
From: Michael Albinus @ 2012-03-01 14:18 UTC (permalink / raw)
  To: Peter Münster; +Cc: help-gnu-emacs

Peter Münster <pmlists@free.fr> writes:

> Hi Michael,

Hi Peter,

sorry for the delay, it took some hours to walk through the dbus-monitor
traces.

> Sometimes, I've started another "emacs -Q -l /tmp/init.el" just to see,
> if it works or not. Now, the problem appears again, at timestamp
> "1330414472". Here the "*Messages*":

According to the traces, you have two Emacs sessions running, sending
notifications to the notification service. It looks, like a notification
daemon wants to be unique for a given client, sending the
notifications. As long as you send notifications from the same client
(aka Emacs session), the daemon stays alive, and does the work.

If another client sends a notification message, the running daemon is
disabled in the D-Bus name owner queue, and a new notification daemon is
started for that client. The point is, that this new daemon is still
reachable via the known name "org.freedesktop.Notifications", but is has
another unique D-Bus name (like ":1.5" or so).

notifications.el registers for signals from the D-Bus service
"org.freedesktop.Notifications". But during registration, this service
name is translated into the D-Bus unique name of the daemon, running at
*this* time. When another daemon takes over the service name
"org.freedesktop.Notifications", it has another D-Bus unique name, for
which notifications.el has not registered. That's why you don't see the
signals anymore.

I have prepared a patch, which shall handle this situation. Could you,
please, check?

--8<---------------cut here---------------start------------->8---
*** /home/albinus/src/emacs/lisp/notifications.el.~107473~	2012-03-01 15:08:08.000000000 +0100
--- /home/albinus/src/emacs/lisp/notifications.el	2012-03-01 15:08:09.000000000 +0100
***************
*** 91,107 ****
  (defvar notifications-on-close-map nil
    "Mapping between notification and close callback functions.")

  (defun notifications-on-action-signal (id action)
    "Dispatch signals to callback functions from `notifications-on-action-map'."
    (let ((entry (assoc id notifications-on-action-map)))
!     (when entry
        (funcall (cadr entry) id action)
        (remove entry 'notifications-on-action-map))))

  (when (fboundp 'dbus-register-signal)
    (dbus-register-signal
     :session
!    notifications-service
     notifications-path
     notifications-interface
     notifications-action-signal
--- 91,114 ----
  (defvar notifications-on-close-map nil
    "Mapping between notification and close callback functions.")

+ (defvar notifications-service-name ""
+   "Unique service name of notification daemon.
+ This must be kept, because the notification daemon could be
+ restarted, and the registered signals cannot be identified anymore.")
+
  (defun notifications-on-action-signal (id action)
    "Dispatch signals to callback functions from `notifications-on-action-map'."
    (let ((entry (assoc id notifications-on-action-map)))
!     (when (and entry
! 	       (string-equal notifications-service-name
! 			     (dbus-event-service-name last-input-event)))
        (funcall (cadr entry) id action)
        (remove entry 'notifications-on-action-map))))

  (when (fboundp 'dbus-register-signal)
    (dbus-register-signal
     :session
!    nil
     notifications-path
     notifications-interface
     notifications-action-signal
***************
*** 113,119 ****
    ;; make it optional, and assume `undefined' as default.
    (let ((entry (assoc id notifications-on-close-map))
  	(reason (or reason 4)))
!     (when entry
        (funcall (cadr entry)
  	       id (cadr (assoc reason notifications-closed-reason)))
        (remove entry 'notifications-on-close-map))))
--- 120,128 ----
    ;; make it optional, and assume `undefined' as default.
    (let ((entry (assoc id notifications-on-close-map))
  	(reason (or reason 4)))
!     (when (and entry
! 	       (string-equal notifications-service-name
! 			     (dbus-event-service-name last-input-event)))
        (funcall (cadr entry)
  	       id (cadr (assoc reason notifications-closed-reason)))
        (remove entry 'notifications-on-close-map))))
***************
*** 121,127 ****
  (when (fboundp 'dbus-register-signal)
    (dbus-register-signal
     :session
!    notifications-service
     notifications-path
     notifications-interface
     notifications-closed-signal
--- 130,136 ----
  (when (fboundp 'dbus-register-signal)
    (dbus-register-signal
     :session
!    nil
     notifications-path
     notifications-interface
     notifications-closed-signal
***************
*** 277,282 ****
--- 286,295 ----
                              (or hints '(:array :signature "{sv}"))
                              :int32 (or timeout -1)))

+     ;; Remember daemon unique service name.
+     (setq notifications-service-name
+ 	  (dbus-get-name-owner :session notifications-service))
+
      ;; Register close/action callback function
      (let ((on-action (plist-get params :on-action))
            (on-close (plist-get params :on-close)))
--8<---------------cut here---------------end--------------->8---

> Thanks for your efforts,

Best regards, Michael.



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

* Re: dbus problem: "notifications-notify :on-action" stops working
  2012-03-01 14:18         ` Michael Albinus
@ 2012-03-04 21:10           ` Peter Münster
  2012-03-05  7:15             ` Michael Albinus
  0 siblings, 1 reply; 8+ messages in thread
From: Peter Münster @ 2012-03-04 21:10 UTC (permalink / raw)
  To: help-gnu-emacs

On Thu, Mar 01 2012, Michael Albinus wrote:

> I have prepared a patch, which shall handle this situation. Could you,
> please, check?

Thank you for the patch, no problem during the last 3 days!
So I think, that the patch is good.

-- 
           Peter




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

* Re: dbus problem: "notifications-notify :on-action" stops working
  2012-03-04 21:10           ` Peter Münster
@ 2012-03-05  7:15             ` Michael Albinus
  0 siblings, 0 replies; 8+ messages in thread
From: Michael Albinus @ 2012-03-05  7:15 UTC (permalink / raw)
  To: Peter Münster; +Cc: help-gnu-emacs

Peter Münster <pmlists@free.fr> writes:

>> I have prepared a patch, which shall handle this situation. Could you,
>> please, check?
>
> Thank you for the patch, no problem during the last 3 days!
> So I think, that the patch is good.

I've committed a modified version of the patch to the trunk.

Best regards, Michael.



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

end of thread, other threads:[~2012-03-05  7:15 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-02-27  9:47 dbus problem: "notifications-notify :on-action" stops working Peter Münster
2012-02-27 10:17 ` Michael Albinus
2012-02-27 11:00   ` Peter Münster
2012-02-27 20:49     ` Michael Albinus
2012-02-28  8:10       ` Peter Münster
2012-03-01 14:18         ` Michael Albinus
2012-03-04 21:10           ` Peter Münster
2012-03-05  7:15             ` Michael Albinus

Code repositories for project(s) associated with this external index

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

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.