Uploaded image for project: 'Qt'
  1. Qt
  2. QTBUG-22789

Race condition on shutdown of QLocalServer on OS X 10.7

    XMLWordPrintable

Details

    • Bug
    • Resolution: Done
    • P3: Somewhat important
    • 4.8.x
    • 4.6.3, 4.7.4
    • Network: Sockets
    • None
    • Qt/Cocoa 4.6.4 (32bit) and Qt/Cocoa 4.7.4 (64bit) under OS X 10.7.2
    • macOS

    Description

      The following test case runs without problems under OS X 10.6 but often hangs before finishing all iterations under OS X 10.7:

      socket.h:

      #pragma once
      
      #include <QtCore/QObject>
      
      class SocketTest : public QObject
      {
      	Q_OBJECT
      
      	private Q_SLOTS:
      		void start();
      };
      

      socket.cpp:

      #include "socket.h"
      
      #include <QtCore/QFile>
      #include <QtCore/QTimer>
      #include <QtNetwork/QLocalServer>
      #include <QtGui/QApplication>
      #include <QtDebug>
      
      void SocketTest::start()
      {
      	QString socketName = "/tmp/qt-socket-test";
      	QFile::remove(socketName);
      
      	for (int i=0; i < 500; i++)
      	{
      		qDebug() << "iteration" << i;
      		QLocalServer* ls = new QLocalServer;
      		if (!ls->listen(socketName))
      		{
      			qWarning() << "Failed to listen";
      		}
      		delete ls;
      	}
      
      	QCoreApplication::quit();
      }
      
      int main(int argc, char** argv)
      {
      	QApplication app(argc,argv);
      
      	SocketTest* st = new SocketTest;
      	QTimer::singleShot(50,st,SLOT(start()));	
      	return app.exec();
      }
      

      Sample backtrace from gdb:

      Thread 1 (process 554):
      #0  0x0000000102628a69 in spin_lock$VARIANT$mp ()
      #1  0x00007fff93fb9ae2 in __CFSocketCancel ()
      #2  0x00007fff93f9385d in CFRunLoopRemoveSource ()
      #3  0x00007fff93f5e932 in __CFSetApplyFunction_block_invoke_1 ()
      #4  0x00007fff93f5e781 in CFBasicHashApply ()
      #5  0x00007fff93f5e704 in CFSetApplyFunction ()
      #6  0x00007fff93f9373d in CFRunLoopRemoveSource ()
      #7  0x0000000100090b75 in qt_mac_remove_socket_from_runloop (socket=0x102e0ba20, runloop=0x102e12f10) at qeventdispatcher_mac.mm:306
      #8  0x0000000100091b0c in QEventDispatcherMac::unregisterSocketNotifier (this=0x1028234f0, notifier=0x102e14910) at qeventdispatcher_mac.mm:437
      #9  0x0000000101c7ca09 in QSocketNotifier::setEnabled (this=0x102e14910, enable=false) at qsocketnotifier.cpp:298
      #10 0x00000001021c453f in QLocalServerPrivate::closeServer (this=0x102e13220) at qlocalserver_unix.cpp:175
      #11 0x00000001021b9ef1 in QLocalServer::close (this=0x102e06410) at qlocalserver.cpp:124
      #12 0x00000001021b9fa4 in QLocalServer::~QLocalServer (this=0x102e06410) at qlocalserver.cpp:108
      #13 0x00000001000024a6 in SocketTest::start (this=0x106000c60) at socket.cpp:23
      
      Thread 6 (process 554):
      #0  0x00007fff94da9bf2 in __psynch_mutexwait ()
      #1  0x0000000102577125 in pthread_mutex_lock ()
      #2  0x00007fff93f9fed5 in CFRunLoopWakeUp ()
      #3  0x00007fff93fb9914 in CFSocketInvalidate ()
      #4  0x00007fff93fcdcf3 in __CFSocketManager ()
      #5  0x00000001025794f5 in _pthread_start ()
      #6  0x000000010258077d in thread_start ()
      

      Attachments

        No reviews matched the request. Check your Options in the drop-down menu of this sections header.

        Activity

          People

            buddenha Oswald Buddenhagen
            robertknight Robert Knight
            Votes:
            1 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Gerrit Reviews

                There are no open Gerrit changes