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

Reply via email to