octave-bug-tracker
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Octave-bug-tracker] [bug #55225] building doc figures in .eps or .pdf f


From: Hg200
Subject: [Octave-bug-tracker] [bug #55225] building doc figures in .eps or .pdf format occasionally silently fails
Date: Mon, 25 May 2020 15:58:34 -0400 (EDT)
User-agent: Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:76.0) Gecko/20100101 Firefox/76.0

Follow-up Comment #43, bug #55225 (project octave):

I don't doubt Pantxo's results. However, I want to share what I see on my
computer because it looks a little different. The following modifications
write to /tmp/t1/ when run with the script from comment #41 and based on the
number of files written, we can see where the data is lost.

1.) A number of 128 .txt files are written here. I can't detect any nullptrs:
++
  void
  qt_graphics_toolkit::print_figure (const graphics_object& go,
                                     const std::string& term,
                                     const std::string& file_cmd,
                                     const std::string& /*debug_file*/) const
  {
    ObjectProxy *proxy = toolkitObjectProxy (go);

    if (proxy)
      proxy->print (QString::fromStdString (file_cmd),
                    QString::fromStdString (term));

    char str[80];
    FILE *fid;
    sprintf (str, "%s.txt", file_cmd.c_str());
    fid = fopen (str, "w");
    fprintf (fid, "%p\n", proxy);
    fclose (fid);
  }
--

2.) A number of 128 .txt files are written here. Therefore the signal must be
emitted 128 times.
++
  void
  ObjectProxy::print (const QString& file_cmd, const QString& term)
  {
    emit sendPrint (file_cmd, term);

    char str[80];
    FILE *fid;
    sprintf (str, "%s.txt", file_cmd.toUtf8().constData());
    fid = fopen (str, "w");
    fclose (fid);
  }
--

3.) If we write files in the slot we have less 128 files. So here is the
loss:
++
  void
  Object::slotPrint (const QString& file_cmd, const QString& term)
  {
    gh_manager& gh_mgr = m_interpreter.get_gh_manager ();

    octave::autolock guard (gh_mgr.graphics_lock ());

    if (object ().valid_object ())
      print (file_cmd, term);

    char str[80];
    FILE *fid;
    sprintf (str, "%s.txt", file_cmd.toUtf8().constData());
    fid = fopen (str, "w");
    fclose (fid);
  }
--

Therefore my tip would be that it is not gl2ps. I would rather say either the
slots are not connected in ObjectProxy::init () or we have a thread problem.

++
connect (this, SIGNAL (sendPrint (const QString&, const QString&)), m_object,
SLOT (slotPrint (const QString&, const QString&)),
Qt::BlockingQueuedConnection);
--

    _______________________________________________________

Reply to this item at:

  <https://savannah.gnu.org/bugs/?55225>

_______________________________________________
  Message sent via Savannah
  https://savannah.gnu.org/




reply via email to

[Prev in Thread] Current Thread [Next in Thread]