Am Samstag, den 27.04.2013, 09:46 -0300 schrieb Lisandro Damián Nicanor Pérez Meyer:
> On Sat 27 Apr 2013 04:14:28 Paul Menzel escribió:
> tag 706243 unreproducible
> thanks
>
> > Am Freitag, den 26.04.2013, 21:53 -0300 schrieb Lisandro Damián Nicanor Pérez Meyer:
> > > tag 706243 moreinfo
> > > thanks
> [snip]
> > Sorry for forgetting that. The only German string I see, is the
> > following.
> >
> > #0 0x00007f7a6c03e594 in QObject::thread (this=0x263d580) at kernel/qobject.cpp:1371
> >
> > The translations is »No such file or directory«, which just means, that
> > GDB did not find the source for `kernel/qobject.cpp`, which is indeed
> > not there as I do not have them installed. So the `list` command does
> > not work.
>
> Hi Paul! I've installed hplip-gui, ran hp-systray and could not reproduce this
> bug.
I think you need a device and scan something.
> I know you filled the bug from a different machine from the one you can
> reproduce this issue. Can you run reportbug there and just add the list of
> installed packages? (ie, no need to fill the bug again, I just need the info).
Sure. I am pasting it at the end of this message.
> What happens is you try adding a new user and run hp-systray from there?
I need to test that.
> Can you reproduce the issue in your i386 machine?
I have no device connected to that machine, but it seems to work.
> I'm CCing the hplip maintainers, because I'm not seeing this kind of crashes
> anywhere else in Qt, so it might be an hplip issue.
I tried to debug this a little, but did not get very far.
$ apt-get source libqtcore4
$ cd qt4-x11-4.8.4+dfsg/src/corelib
qt4-x11-4.8.4+dfsg/src/corelib$ LANG=C gdb python -c ~/20130426--hp-systray--libQtCore.so.4.8.2.core
#0 0x00007f7a6c03e594 in QObject::thread (this=0x263d580) at kernel/qobject.cpp:1371
1371 }
(gdb) l
1366 \sa moveToThread()
1367 */
1368 QThread *QObject::thread() const
1369 {
1370 return d_func()->threadData->thread;
1371 }
1372
1373 /*!
1374 Changes the thread affinity for this object and its children. The
1375 object cannot be moved if it has a parent. Event processing will
So the not sure why it says 1371 and not 1370 where it actually has some
command line, which would make sense for a segmentation fault, if
`d_func()->threadData->thread` in invalid.
Looking at HPLIP code, it looks like this is related somehow to PyQt’s
SystemTray.
> #10 0x00000000004c23d2 in frame_dealloc.14820 (f=
> Frame 0x1e13910, for file /usr/share/hplip/ui4/systemtray.py, line 810, in run (i=0, notifier=<QSocketNotifier at remote 0x22e5b00>))
> at ../Objects/frameobject.c:460
> _py_tmp = <optimized out>
> p = 0x1e13a90
> valuestack = 0x1e13aa8
> co = <optimized out>
> #11 0x00000000004c2427 in frame_dealloc.14820 (f=
> Frame 0x2673840, for file /usr/share/hplip/ui4/systemtray.py, line 748, in notifierActivated ()) at ../Objects/frameobject.c:468
> p = <optimized out>
> valuestack = <optimized out>
> co = <optimized out>
No idea, why line 810 is after line 748 in this backtrace.
$ nl -ba ui4/systemtray.py
[…]
624 def notifierActivated(self, s):
625 m = ''
626 while True:
627 try:
628 r, w, e = select.select([self.read_pipe], [], [self.read_pipe], 1.0)
629 except select.error:
630 log.debug("Error in select()")
631 break
632
633 if e:
634 log.error("Pipe error: %s" % e)
635 break
636
637 if r:
638 m = ''.join([m, os.read(self.read_pipe, self.fmt_size)])
639 while len(m) >= self.fmt_size:
640 event = device.Event(*struct.unpack(self.fmt, m[:self.fmt_size]))
641
642 m = m[self.fmt_size:]
643
644 if event.event_code == EVENT_CUPS_QUEUES_CHANGED:
645 self.resetDevice()
646 for d in device.getSupportedCUPSDevices(back_end_filter=['hp', 'hpfax']):
647 self.addDevice(d)
648
649 self.setMenu()
650
651 if event.event_code == EVENT_USER_CONFIGURATION_CHANGED:
652 log.debug("Re-reading configuration (EVENT_USER_CONFIGURATION_CHANGED)")
653 self.user_settings.load()
654 self.user_settings.debug()
655
656 elif event.event_code == EVENT_SYSTEMTRAY_EXIT:
657 self.quit()
658 return
659
660 if self.user_settings.systray_visible in \
661 (SYSTRAY_VISIBLE_SHOW_ALWAYS, SYSTRAY_VISIBLE_HIDE_WHEN_INACTIVE):
662
663 log.debug("Showing...")
664 self.tray_icon.setVisible(True)
665
666 if event.event_code == EVENT_DEVICE_UPDATE_ACTIVE:
667 if not self.active_icon:
668 self.tray_icon.setIcon(self.prop_active_icon)
669 self.active_icon = True
670 continue
671
672 elif event.event_code == EVENT_DEVICE_UPDATE_INACTIVE:
673 if self.active_icon:
674 self.tray_icon.setIcon(self.prop_icon)
675 self.active_icon = False
676 continue
677
678 elif event.event_code == EVENT_DEVICE_UPDATE_BLIP:
679 if not self.active_icon:
680 self.tray_icon.setIcon(self.prop_active_icon)
681 self.active_icon = True
682 QTimer.singleShot(BLIP_DELAY, self.blipTimeout)
683 continue
684
685 if self.user_settings.systray_visible in (SYSTRAY_VISIBLE_HIDE_WHEN_INACTIVE, SYSTRAY_VISIBLE_HIDE_ALWAYS):
686 log.debug("Waiting to hide...")
687 QTimer.singleShot(HIDE_INACTIVE_DELAY, self.timeoutHideWhenInactive)
688
689 if event.event_code <= EVENT_MAX_USER_EVENT:
690 self.addDevice(event.device_uri)
691 self.setMenu()
692
693 if self.tray_icon.supportsMessages():
694
695 log.debug("Tray icon message:")
696 event.debug()
697
698 error_state = STATUS_TO_ERROR_STATE_MAP.get(event.event_code, ERROR_STATE_CLEAR)
699 desc = device.queryString(event.event_code)
700
701 show_message = False
702 if self.user_settings.systray_messages == SYSTRAY_MESSAGES_SHOW_ALL: # OK, Busy
703 show_message = True
704
705 elif self.user_settings.systray_messages in (SYSTRAY_MESSAGES_SHOW_ERRORS_AND_WARNINGS, SYSTRAY_MESSAGES_SHOW_ERRORS_ONLY):
706 if error_state == ERROR_STATE_ERROR:
707 show_message = True
708
709 elif self.user_settings.systray_messages == SYSTRAY_MESSAGES_SHOW_ERRORS_AND_WARNINGS and \
710 error_state in (ERROR_STATE_WARNING, ERROR_STATE_LOW_SUPPLIES, ERROR_STATE_LOW_PAPER):
711
712 show_message = True
713
714 if event.printer_name:
715 d = QString(event.printer_name)
716 else:
717 back_end, is_hp, bus, model, serial, dev_file, host, zc, port = \
718 device.parseDeviceURI(event.device_uri)
719
720 if bus == 'usb':
721 idd = serial
722 elif bus == 'net':
723 idd = host
724 elif bus == 'par':
725 idd = dev_file
726 else:
727 idd = 'unknown'
728
729 self.model = models.normalizeModelUIName(model)
730
731 if back_end == 'hp':
732 d = self.__tr("%1 Printer (%2)").arg(model).arg(idd)
733
734 elif back_end == 'hpaio':
735 d = self.__tr("%1 Scanner (%2)").arg(model).arg(idd)
736
737 elif back_end == 'hpfax':
738 d = self.__tr("%1 Fax (%2)").arg(model).arg(idd)
739
740 else:
741 d = self.__tr("%1 (%2)").arg(model).arg(idd)
742
743 if show_message:
744 if have_pynotify and pynotify.init("hplip"): # Use libnotify/pynotify
745 icon, urgency = ERROR_STATE_TO_ICON_AND_URGENCY_PYNOTIFY.get(error_state,
746 (getPynotifyIcon('info'), pynotify.URGENCY_NORMAL))
747
748 if event.job_id and event.title:
749 msg = "%s\n%s: %s\n(%s/%s)" % (unicode(d), desc, event.title, event.username, event.job_id)
750 log.debug("Notify: uri=%s desc=%s title=%s user=%s job_id=%d code=%d" %
751 (event.device_uri, desc, event.title, event.username, event.job_id, event.event_code))
752 else:
753 msg = "%s\n%s (%s)" % (unicode(d), desc, event.event_code)
754 log.debug("Notify: uri=%s desc=%s code=%d" % (event.device_uri, desc, event.event_code))
755
756 n = pynotify.Notification("HPLIP Device Status", msg, icon)
757 n.set_urgency(urgency)
758
759 if error_state == ERROR_STATE_ERROR:
760 n.set_timeout(pynotify.EXPIRES_NEVER)
761 else:
762 n.set_timeout(TRAY_MESSAGE_DELAY)
763
764 n.show()
765
766 else: # Use "standard" message bubbles
767 icon = ERROR_STATE_TO_ICON.get(error_state, QSystemTrayIcon.Information)
768 if event.job_id and event.title:
769 log.debug("Bubble: uri=%s desc=%s title=%s user=%s job_id=%d code=%d" %
770 (event.device_uri, desc, event.title, event.username, event.job_id, event.event_code))
771 self.tray_icon.showMessage(self.__tr("HPLIP Device Status"),
772 QString("%1\n%2: %3\n(%4/%5)").\
773 arg(d).\
774 arg(desc).arg(event.title).\
775 arg(event.username).arg(event.job_id),
776 icon, TRAY_MESSAGE_DELAY)
777
778 else:
779 log.debug("Bubble: uri=%s desc=%s code=%d" % (event.device_uri, desc, event.event_code))
780 self.tray_icon.showMessage(self.__tr("HPLIP Device Status"),
781 QString("%1\n%2 (%3)").arg(d).\
782 arg(desc).arg(event.event_code),
783 icon, TRAY_MESSAGE_DELAY)
784
785 else:
786 break
787
788
789 def blipTimeout(self):
790 if self.active_icon:
791 self.tray_icon.setIcon(self.prop_icon)
792 self.active_icon = False
793
794
795
796 def __tr(self, s, c=None):
797 return QApplication.translate("SystemTray", s, c, QApplication.UnicodeUTF8)
798
799
800
801 def run(read_pipe):
802 log.set_module("hp-systray(qt4)")
803 log.debug("PID=%d" % os.getpid())
804
805 app = SystemTrayApp(sys.argv, read_pipe)
806 app.setQuitOnLastWindowClosed(False) # If not set, settings dlg closes app
807
808 i = 0
809 while i < 60:
810 if QSystemTrayIcon.isSystemTrayAvailable():
811 break
812 time.sleep(1.0)
813 i += 1
814
815 if not QSystemTrayIcon.isSystemTrayAvailable():
816 FailureUI(None,
817 QApplication.translate("SystemTray",
818 "<b>No system tray detected on this system.</b><p>Unable to start, exiting.</p>",
819 None, QApplication.UnicodeUTF8),
820 QApplication.translate("SystemTray", "HPLIP Status Service",
821 None, QApplication.UnicodeUTF8))
822 else:
823 notifier = QSocketNotifier(read_pipe, QSocketNotifier.Read)
824 QObject.connect(notifier, SIGNAL("activated(int)"), app.notifierActivated)
825
826 app.exec_()
So, it probably is a HPLIP or PyQt issue. Though libqtcore4 should
probably not crash and somehow check that it can dereference some
pointer.
Thanks,
Paul
-- System Information:
Debian Release: 7.0
APT prefers unstable
APT policy: (500, 'unstable'), (1, 'experimental')
Architecture: amd64 (x86_64)
Kernel: Linux 3.2.0-4-amd64 (SMP w/2 CPU cores)
Locale: LANG=de_DE.UTF-8, LC_CTYPE=de_DE.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Versions of packages libqtcore4 depends on:
ii libc6 2.13-38
ii libgcc1 1:4.7.2-5
ii libglib2.0-0 2.33.12+really2.32.4-5
ii libstdc++6 4.7.2-5
ii multiarch-support 2.13-38
ii zlib1g 1:1.2.7.dfsg-13
libqtcore4 recommends no packages.
Versions of packages libqtcore4 suggests:
ii libicu48 4.8.1.1-12
ii libthai0 0.1.18-2
-- no debconf information
Attachment:
signature.asc
Description: This is a digitally signed message part