gm-notify stops updating
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
gm-notify (Ubuntu) |
Confirmed
|
Undecided
|
Unassigned |
Bug Description
After some period of usage (varies, could be an hour, could be less), gm-notify doesn't update anymore.
If it shows no new messages, and new mail comes in, it should pop up a notification and change the mail icon's color, but nothing happens.
If it shows new messages and I read all of them, it should change the mail icon back to black, but nothing happens.
Once this bug starts happening, the number of new messages shown in the messaging menu never changes.
The only clue I get is, if I run gm-notify from the commandline:
Unhandled Error
Traceback (most recent call last):
File "/build/
File "/usr/lib/
self.
File "/usr/lib/
self.
File "/usr/lib/
callbacklis
--- <exception caught here> ---
File "/usr/lib/
methodwrapp
File "/usr/lib/
self.
File "/usr/lib/
callback(data, **kargs)
File "/usr/lib/
self.
File "/usr/lib/
if self.mails and self.cb_new: self.cb_
File "/usr/bin/
self.
File "/usr/bin/
n.show()
gio.Error: GDBus.Error:
Description: Ubuntu 12.04 LTS
Release: 12.04
Installed: 0.10.3-0ubuntu2
Candidate: 0.10.3-0ubuntu2
Version table:
*** 0.10.3-0ubuntu2 0
500 http://
100 /var/lib/
As a short fix you can do:
$ killall notification-daemon
when you recognize issue.
This will stop the notification-daemon and start it "fresh" on next notification.
The problem is with notification- daemon. It has a hard-coded limit of 20. This is, AFAIK, how many messages can be in the queue simultaneously. Problem is that when notifications close by them selves the queue is not updated properly.
However: If I _manually_ close each message, by clicking the [x] on the notification, the g_hash_ table_size( daemon- >priv-> queue) is updated. On my system it seems to be a limit of 22 - or by "some magic" two of the messages get removed.
A quick-hack (not a fix) is to run a script to kill the daemon on error. E.g:
$HOME/bin/ notify- limit-err- kill
[Code]:
#!/bin/bash
debug=0
dbus-monitor "type='error'" |
while read buf; do
((debug)) && printf >&2 "MESSG: %-40s\n" "$buf"
if [[ "$buf" == 'string "Exceeded maximum number of notifications"' ]]; then
killall notification-daemon
fi
done
[EOF Code]
$ chmod +x notify- limit-err- kill
And add it as a startup script (or launch it manually).
You will, however, by this, loose the one notification that caused the error.
I have a script for catching this as well, and re-transmitting after spawn of daemon - but code is a bit ugly ...