Commit Graph

274 Commits (5180f32c5abe01acd65cde68c2c16aedda4028ec)

Author SHA1 Message Date
Olivier Goffart 5180f32c5a Add Q_DECL_OVERRIDE in the src subdirectory
Done automatically with clang-modernize on linux

(But does not add Q_DECL_OVERRIDE to the function that are marked
 as inline because it a compilation error with MSVC2010)

Change-Id: I2196ee26e3e6fe20816834ecea5ea389eeab3171
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2014-12-03 09:57:11 +01:00
Tor Arne Vestbø 85a7138114 Define Q_CC_CLANG to be the version of upstream Clang that's in use
We map the Apple Clang versions to upstream, so that we have one
define to compare against.

Fixes build break on iOS due to qbasicatomic.h not defining
QT_BASIC_ATOMIC_HAS_CONSTRUCTORS on Apple Clang versions, which
is needed after 1e9db9f5e1

Change-Id: I17493c0187c20abc5d22e71944d62bfd16afbad2
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2014-11-05 07:30:32 +01:00
Gabriel de Dietrich 8ee9774e67 Merge "Merge remote-tracking branch 'origin/5.3' into 5.4" into refs/staging/5.4 2014-10-01 16:21:12 +02:00
Nico Vertriest 54853c5f66 Doc: Use title case in section1 titles
Using Python script title-cased.py

Task-number: QTBUG-41250
Change-Id: I00d3d7a0b30db7304a7904efd6d63abd9a7b493b
Reviewed-by: Topi Reiniö <topi.reinio@digia.com>
2014-09-30 13:52:51 +02:00
Gabriel de Dietrich 8ab25620d3 Merge remote-tracking branch 'origin/5.3' into 5.4
Conflicts:
	src/network/socket/qnativesocketengine_unix.cpp
	src/widgets/kernel/qwidget_qpa.cpp

Change-Id: I6f1aa320d5ca66cd92d601a95885aeaab0abb191
2014-09-29 13:38:11 +02:00
Matti Paaso 974c210835 Update license headers and add new license files
- Renamed LICENSE.LGPL to LICENSE.LGPLv21
- Added LICENSE.LGPLv3
- Removed LICENSE.GPL

Change-Id: Iec3406e3eb3f133be549092015cefe33d259a3f2
Reviewed-by: Iikka Eklund <iikka.eklund@digia.com>
2014-09-24 12:26:19 +02:00
Frederik Gladhorn c5a3e5edd9 Merge remote-tracking branch 'origin/5.3' into 5.4
The isAlwaysAskOption was removed in 3862171315
so manually removed code in
src/plugins/bearer/connman/qconnmanengine.cpp

Conflicts:
	src/corelib/global/qglobal.h
	src/corelib/tools/qcollator_macx.cpp
	src/corelib/tools/qstring.cpp
	src/gui/kernel/qwindow.cpp
	src/gui/kernel/qwindow_p.h
	src/gui/text/qtextengine.cpp
	src/platformsupport/fontdatabases/fontconfig/qfontenginemultifontconfig_p.h
	src/plugins/platforms/android/qandroidinputcontext.cpp
	src/plugins/platforms/xcb/qglxintegration.cpp
	src/plugins/platforms/xcb/qglxintegration.h
	src/plugins/platforms/xcb/qxcbconnection_xi2.cpp
	src/testlib/qtestcase.cpp
	src/testlib/qtestlog.cpp
	src/widgets/dialogs/qfiledialog.cpp
	src/widgets/kernel/qwindowcontainer.cpp
	tests/auto/corelib/tools/qcollator/tst_qcollator.cpp
	tests/auto/gui/text/qtextscriptengine/tst_qtextscriptengine.cpp
	tests/auto/widgets/kernel/qwidget_window/tst_qwidget_window.cpp
	tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp

Change-Id: Ic5d4187f682257a17509f6cd28d2836c6cfe2fc8
2014-09-23 11:23:36 +02:00
Thiago Macieira 3bfdacaaeb Document that default-constructed QFuture are canceled
Task-number: QTBUG-40680
Change-Id: Idee9ff75c89c8349be779b90ee9c34a899d92c0c
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
Reviewed-by: Jerome Pasion <jerome.pasion@digia.com>
Reviewed-by: Martin Smith <martin.smith@digia.com>
2014-09-22 19:13:31 +02:00
Adam Majer 1fa3627423 Remove reference to removed qatomic_sparc.h
qatomic_sparc.h was removed previously as part of general cleanup of
old atomic code for Qt 5.3. Unfortunately SPARC include reference was
not removed resulting in build failure on that platform.

Task-number: QTBUG-41384
Change-Id: Ic6e31b32324b0e5dd3700a6a21515a8eea5668bd
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2014-09-18 15:58:13 +02:00
Marc Mutz c55aec2ed7 QFutureInterface: allow to work with a QThreadPool != globalInstance()
Background:
It is often necessary/advisable to schedule tasks on thread pools !=
globalInstance(). As Herb Sutter writes in
http://www.drdobbs.com/parallel/use-thread-pools-correctly-keep-tasks-sh/216500409
and the Qt Training Material stresses, tasks you schedule on a (global)
thread pool should be non-blocking, which currently rules out using any of
the QtConcurrent functions for, say, file I/O.

Nonetheless it's often convenient to have thread pools also for file I/O, as
the thumbnail viewer exercise in the Qt Training Material shows. In this
case, you'd use a dedicated thead pool, leaving the global thread pool for
CPU-bound tasks.

Yet, none of the QtConcurrent functions allow to pick the QThreadPool
instance on which to schedule the work created with them.

This patch prepares for them to do so.

This is the first part of the forward-port of
https://qt.gitorious.org/qt/qt/merge_requests/1281.

Implement by using a new QThreadPool* member that defaults to nullptr,
and adding setThreadPool to set this member, then using it in lieu of
QThreadPool::globalInstance() everywhere.

I chose to leave m_pool == nullptr to mean globalInstance() to avoid
creating the global instance whenever a QFuture is created, even if the
future represents the result of a calculation not run on the global thread
pool.

[ChangeLog][QtCore][QFuture] Can now be used with any QThreadPool, not
just globalInstance().

Task-number: QTBUG-17220
Change-Id: I4e1dc18d55cf60141b2fa3d14e2d44a3e9e74858
Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
2014-08-05 18:04:56 +02:00
Thiago Macieira 63efdf9851 Use the 3-argument testAndSet in the fetchAndXxx operations
Saves us from an extra load in the loop when the result is already
there.

Change-Id: Ib65b5b13f27975b8fc88be9b888c19505bf5e07c
Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@digia.com>
Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
2014-07-25 18:02:06 +02:00
Frederik Gladhorn a09a8d509a Merge remote-tracking branch 'origin/5.3' into dev
Conflicts:
	mkspecs/qnx-x86-qcc/qplatformdefs.h
	src/corelib/global/qglobal.h
	src/network/socket/qnativesocketengine_winrt.cpp
	src/plugins/platforms/android/androidjniaccessibility.cpp
	src/plugins/platforms/windows/qwindowswindow.cpp

Manually adjusted:
	mkspecs/qnx-armle-v7-qcc/qplatformdefs.h
	to include 9ce697f2d5

Thanks goes to Sergio for the qnx mkspecs adjustments.

Change-Id: I53b1fd6bc5bc884e5ee2c2b84975f58171a1cb8e
2014-07-01 16:25:19 +02:00
Andrew Knight c328b39181 winrt: Fix main thread dispatcher creation
Don't create a dispatcher for all adopted threads, only the main thread.
This was causing the GUI thread to skip platform dispatcher creation.

Change-Id: Id0de976f9def48e8d58efd20815b6fd18faebefa
Reviewed-by: Andrew Knight <andrew.knight@digia.com>
2014-06-28 13:00:46 +02:00
Olivier Goffart 6303307692 Add a comment stating QMutex::isRecursive should be made const in Qt6
Change-Id: I452b0764790112c59af77bc8d95f403ff37cbc4a
Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@digia.com>
2014-06-26 14:21:35 +02:00
Olivier Goffart 321d6dda75 Fix QMutex documentation saying some function are static while they are not
qdoc only see a fake QMutex class (the same as the one built in bootstrap)
But that fake QMutex had static member while the normal QMutex class
has non static member.

QMutexLocker::mutex is also a const function in the real QMutexLocker

Task-number: QTBUG-38522
Change-Id: I220434ffc6a9e990029f770e2536ecb55b4e2182
Reviewed-by: Martin Smith <martin.smith@digia.com>
Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@digia.com>
2014-06-26 14:21:21 +02:00
Andrew Knight b46e48f1b7 winrt: Use native threading
Instead of using std::thread, use the WinRT ThreadPool to manage
threads. This allows for setting the scheduling priority, and provides
a path to enable XAML integration (which requires Qt run on a background
thread).

QThread::terminate() is still unsupported, and only the winmain thread
can be adopted due to the behavior of the thread pool when creating
tasks from the GUI thread. The associated tests are now skipped, and
all other QThread tests pass.

Task-number: QTBUG-31397
Change-Id: Ib512a328412e1dffecdc836bc39de3ccd37afa13
Reviewed-by: Oliver Wolff <oliver.wolff@digia.com>
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
2014-06-25 16:34:39 +02:00
David Faure 29513210df Doc: QAtomicInteger first appeared in Qt 5.3
Change-Id: I900e5b0ec8291d34685cb545540a5a9f54551d05
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2014-06-09 18:44:57 +02:00
David Faure 50491efb0e Fix typos in comments (qfreelist and qmutex)
Change-Id: I782b18b9f82a72a29371564838252e1838faf86c
Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
2014-05-26 21:08:44 +02:00
Andrew Knight 8b0fd78caa WinRT: Don't use the native thread handle for waiting
There is no guarantee that the handle from std::thread will be valid
when a wait is made. Instead, simply use an elapsed timer and check
if the thread is finished. This prevents an exception from being thrown
when a bad handle is encountered.

Task-number: QTBUG-31397
Change-Id: Ie2a7e6cbfbb27bf1baff779322670d85e92e10dd
Reviewed-by: Oliver Wolff <oliver.wolff@digia.com>
2014-04-16 12:26:43 +02:00
Thiago Macieira d84da39964 Use the new 3-operand testAndSet functions in QMutex
This allows us to get the current value of the QMutex / QBasicMutex
after the testAndSet operation failed. It saves an extra load from
memory.

Change-Id: I4922a8b3df15e342b177b13f56cf4f1184314520
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
2014-04-05 21:47:09 +02:00
Andrew Knight f116778aed WinRT: Use native wait methods instead of std::thread's sleep_for
sleep_for appears to be unreliable (resulting in infinite waits) when
used in a thread which is also using native waiting methods. This is
also a step in the direction of eliminating std::thread's usage in WinRT.

Change-Id: I58bc4bf9ada25de247849333ef925964676b7239
Reviewed-by: Oliver Wolff <oliver.wolff@digia.com>
2014-03-06 17:22:55 +01:00
Thiago Macieira e7f685002b Atomics: implement fetchAndSub on top of fetchAndAdd
Instead of looping unnecessarily on top of testAndSet.

Task-number: QTBUG-37031
Change-Id: I8120f8405eb76dccc9066749cee0a92b0f2da20e
Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
Reviewed-by: Sergio Ahumada <sahumada@blackberry.com>
2014-03-04 04:34:36 +01:00
Thiago Macieira 19c7098251 Add the rest of the non-volatile members of std::atomic to QBasicAtomic
[ChangeLog][QtCore][Atomic support]Added more operations to the atomic
classes, including operator T(), operator=(T), operator++,
operator--. For the QAtomicInteger, bit-manipulation operations are
also provided, both in operator and in fetchAndXxxYyyyyy modes.

Change-Id: I39c07be74e15e0a48f9e931f4342b182004dee1a
Reviewed-by: David Faure <david.faure@kdab.com>
2014-02-16 05:12:47 +01:00
Thiago Macieira 634f82f1f1 Add a testAndSet overload to the atomics that returns the current value
This is extremely useful, since the most common action after a failed
compare-and-swap is to loop around, trying again with the current
value as found in memory.

Code currently written as:
    do {
        Type value = atomic.load();
        ...
    } while (!atomic.testAndSetRelaxed(value, desired));

Becomes:
    Type value = atomic.load();
    do {
        ...
    } while (!atomic.testAndSetRelaxed(value, desired, value));

In most CPU architectures, the value that was found in memory is known
to the compare-and-swap code, so this is more efficient than the
previous code. In architectures where the value is not known, the new
code is no worse than before.

The implementation sometimes modified an existing function, sometimes
it added a new one, depending on whether more registers were needed in
the assembly (like ARMv6-7), the code became more complex (ARMv5), the
optimizer failed (C++11), or it was just plain equivalent (MIPS).

Change-Id: I7d6d200ea9746ec8978a0c1e1969dbc3580b9285
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2014-02-16 05:12:26 +01:00
Andrew Knight 143d591aab WinRT: Fix use of std::thread in QThread
Don't delete the thread object without detaching it, use detach()
instead of CloseHandle(), and avoid a double-delete.

Change-Id: Ia169a96fb32805e06abe099c3c35e97ce485f088
Reviewed-by: Oliver Wolff <oliver.wolff@digia.com>
2014-02-10 12:49:06 +01:00
Thiago Macieira 8e26730fb7 Use full-barrier in the "non-atomic" API in QAtomic{Int,Integer,Pointer}
This is more in line with what std::atomic does.

Change-Id: I6fe96102995a3fda8f82475758995593358735bc
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
2014-01-30 18:06:31 +01:00
Thiago Macieira aba30f0234 Replace the type-based QAtomicIntegerTraits with a size-based one
This simplifies the code a lot and avoids silly mistakes where a
specific integer type is missing (such as char16_t).

Change-Id: Id91dfd1919e783e0a9af7bfa093ca560a01b22d1
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
2014-01-30 18:06:27 +01:00
Thiago Macieira fd0d576709 Centralize support for QBasicAtomic for ints and longs
No need to redefine everywhere, since they're required to be supported.

Change-Id: I2bdbbd0b0c44871e3bd0edcf0289fc58dd50ff31
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
2014-01-30 18:06:23 +01:00
Thiago Macieira 8d2a9bcf1d Ensure that the pointer-sized QAtomicInteger specialization exists
This is already implemented in qatomic_x86.h, qatomic_ia64.h,
qatomic_mips.h, qatomic_armv6.h, and qatomic_cxx11.h. For
qatomic_msvc.h, we've just fixed it.

For qatomic_gcc.h, we know that the compiler supports it, so just add
it. According to the GCC manual, it might print a warning on some
platforms, so we only enable that on 64-bit builds.

For qatomic_unix.h, the support was missing (along with support for
unsigned 32-bit), so this commits adds it.

For qatomic_armv5.h, the platform does not always support 64-bit
atomics, but ARMv5 cannot compile in 64-bit mode anyway.

Change-Id: Ia8b3b5c641f11e5df05937fe7442be0a223174ef
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
2014-01-30 18:06:17 +01:00
Thiago Macieira e4533e3aeb Introduce QAtomicInteger<T> and derive QAtomicInt from it
QAtomicInteger<T> is to QBasicAtomicInteger<T> what QAtomicInt was to
QBasicAtomicInt: just a little more syntactic sugar. The Basic classes
do not always have a constructor, since they depend on compiler
support. The constructor is always present in the non-Basic class, at
the expense of making it non-POD for C++98 code.

This commit also repurposes most of QAtomicInt's documentation for
QAtomicInteger. It adds only the Q_ATOMIC_INTnn_IS_SUPPORTED macro
that explains whether the given type is supported on this platform.

Change-Id: I58886d6fa49fea4de24015c40dae29c9fa534e00
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Reviewed-by: Kurt Pattyn <pattyn.kurt@gmail.com>
2014-01-30 18:05:38 +01:00
Frederik Gladhorn 9033977d39 Merge remote-tracking branch 'origin/stable' into dev
Conflicts:
	src/corelib/global/qglobal.h
	src/corelib/tools/qstring.cpp
	src/gui/image/image.pri
	src/gui/image/qimage.cpp
	src/plugins/platforms/cocoa/qcocoawindow.h
	src/plugins/platforms/cocoa/qcocoawindow.mm
	src/plugins/platforms/eglfs/qeglfshooks_stub.cpp
	tests/auto/corelib/io/qstandardpaths/tst_qstandardpaths.cpp

Change-Id: I3b9ba029c8f2263b011f204fdf68c3231c6d4ce5
2014-01-20 18:18:59 +01:00
Eskil Abrahamsen Blomfeldt 894ce8aaab Android: Don't register main thread on loading library
When building with debug, all SLOT or SIGNAL macros will
expand to a function call, and then function will call
QThreadData::current(), which will set
QCoreApplication::theMainThread if it has not already been
done. Since Qt Widgets has these macros in the static
initialization of the library, we would register the
Android main thread as the main thread of Qt, which would
mean that the actual application object was created on
a different thread than the main thread. This caused warnings
to appear, and also triggered a race condition which
caused widget applications to sometimes show a black screen
instead of content on startup when run with the OpenGL plugin.

Task-number: QTBUG-35048
Change-Id: Ie8979f5e7cd5662f8d7dd276de9f94f27cc120b5
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2014-01-16 15:41:21 +01:00
Oswald Buddenhagen 882bf3475c expand tabs and related whitespace fixes in *.{cpp,h,qdoc}
the diff -w for this commit is empty.

Started-by: Thiago Macieira <thiago.macieira@intel.com>
Change-Id: I77bb84e71c63ce75e0709e5b94bee18e3ce6ab9e
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2014-01-13 22:46:50 +01:00
Andrew Knight 9b19a69c89 WinRT: Clean up core event dispatcher
- Move private classes in the .cpp file (they aren't needed outside)
- Conform to Qt style, such as includes and braces
- Use ComPtr where appropriate
- Use foreach where appropriate
- Remove non-functional wake/interrupt leftovers
- Remove redundant timer list
- Make the timer callback a static method, so it won't crash if it
  gets called on shutdown

Task-number: QTBUG-35945

Change-Id: I5426fba2735e908a04ea60287f9936f5abde6644
Reviewed-by: Oliver Wolff <oliver.wolff@digia.com>
2014-01-07 10:55:54 +01:00
Frederik Gladhorn f0fbff4c90 Merge remote-tracking branch 'origin/stable' into dev
Change-Id: I2defae1904154283446b069d151c3ef57302ec7b
2013-12-24 00:56:59 +01:00
Friedemann Kleint d1f8a56416 qthread_win.cpp: Fix warnings when waiting for adopted threads.
Task-number: QTBUG-35591

Change-Id: I63169bd8a9758a7dad33d4231d3d6c9d71c7e252
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2013-12-17 16:44:03 +01:00
Thiago Macieira bfe0db6fbe Remove all "old atomic" code from Qt
The new atomic code was introduced in Qt 5.0. The platforms that did not
get ported were announced as deprecated in Qt 5.2. The code is now
removed in Qt 5.3.

The status for the platform/compiler/OS combinations affected is:
 * Linux with GCC or Clang: still compiles on all platforms
   (via qatomic_cxx11.h or qatomic_gcc.h)
 * INTEGRITY with Green Hills compiler: no longer compiles
 * Solaris on UltraSPARC, with Sun Studio: no longer compiles
 * AIX on POWER5 or 6, with IBM Visual Age: no longer compiles
   (probably did not compile Qt 5.0 either)
 * VxWorks in kernel mode: no longer compiles

[ChangeLog][General] Support for the following platforms has been
removed, due to lack of interest in updating support: INTEGRITY,
VxWorks, Solaris on UltraSPARC (with the Sun Studio compiler suite), AIX
on POWER processors (with IBM Visual Age compiler suite).

Change-Id: I8a961385fd95011c016b2b1eec52034794dae3e1
Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
2013-12-10 17:55:15 +01:00
Thiago Macieira 1ca1cec64d Make a nicer output when QBasicAtomicInteger is used with a wrong T
Before, we'd get just an error message that the size of the array was
negative. Now, for C++11 compilers, we get a better error message:

qbasicatomic.h:117:5: error: static assertion failed: Template parameter is not a supported integer on this platform
qbasicatomic.h:119:24: error: invalid use of incomplete type ‘struct QAtomicOps<long long unsigned int>’

Change-Id: I6b0792254c0dc6103a4a7608f2942d59cda07c00
Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
2013-12-03 23:00:51 +01:00
Thiago Macieira 4f2471b8cc Fix silly typo in a macro for QAtomicInt's constructor
The T was missing in QT_BASIC_ATOMIC_HAS_CONSTRUCTORS. This makes
QAtomicInt's constructor become constexpr.

Change-Id: Ibe58ff36517c5d05ce8af9c0f28169fa63521632
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
2013-12-03 10:14:40 +01:00
Fatih Aşıcı f3e220d4c2 Set loadAcquire() as const to fix powerpc build
Change-Id: Ica1ea565e7eefd2ef378737eb9687ebbf4adf7b0
Fetched-from: https://bugzilla.redhat.com/attachment.cgi?id=812643
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2013-11-29 18:48:10 +01:00
Frederik Gladhorn 4a8273a6fc Merge remote-tracking branch 'origin/stable' into dev
For the conflicts in msvc_nmake.cpp the ifdefs are extended since we
need to support windows phone in the target branch while it is not there
in the current stable branch (as of Qt 5.2).

Conflicts:
	configure
	qmake/generators/win32/msvc_nmake.cpp
	src/3rdparty/angle/src/libEGL/Surface.cpp
	src/angle/src/common/common.pri
	src/corelib/global/qglobal.h
	src/corelib/io/qstandardpaths.cpp
	src/plugins/platforms/qnx/qqnxintegration.cpp
	src/plugins/platforms/qnx/qqnxscreeneventhandler.h
	src/plugins/platforms/xcb/qglxintegration.h
	src/widgets/kernel/win.pri
	tests/auto/corelib/thread/qreadwritelock/tst_qreadwritelock.cpp
	tests/auto/corelib/tools/qdatetime/tst_qdatetime.cpp
	tests/auto/gui/text/qtextdocument/tst_qtextdocument.cpp
	tools/configure/configureapp.cpp

Change-Id: I00b579eefebaf61d26ab9b00046d2b5bd5958812
2013-11-26 22:35:48 +01:00
Friedemann Kleint 0da841bc33 Windows: Close handle to thread checking for adopted threads.
Task-number: QTBUG-34840

[ChangeLog][QtCore][QThread][Windows][QTBUG-34840] Fix handle leak.

Change-Id: I537c1c81a43907f01a81be740746582266969c6f
Reviewed-by: Andy Shaw <andy.shaw@digia.com>
Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
2013-11-26 11:29:54 +01:00
David Faure 3b48a65e99 QBasicAtomicInt: fix wrong comment about non-atomic API
The public documentation for load() and store() says it's atomic,
and it is:
* using _q_value.store(newValue, std::memory_order_relaxed) in the C++11
implementation
* using a simple assignment otherwise, which is atomic (and relaxed, no
memory barriers) on all the existing C++ ABIs.

Change-Id: I40faa47120163225bd11c3a32514ac97ef8bbbd4
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2013-11-02 09:52:42 +01:00
David Faure a9b6a78e54 QThreadPool: fix race at time of thread expiry.
The current synchronization mechanism was racy: decrementing waitingThreads
and then hoping that the wakeOne will wake a thread before its expiry
timeout happens. In other words, on timeout, a just-assigned task would
never run. And then no other task would run, if maxThreadCount is reached.

Fixed by using a queue of waiting threads (rather than just a count), and by
moving the wait condition into the thread itself, so we know precisely
which one we're waking up, and we can remove it from the set of waiting threads
before waking it up, and therefore it can determine on wakeup whether it
has work to do (caller removed it from the queue) or it expired (it's still
in the queue). This is reliable, whereas the return value from QWaitCondition::wait
isn't reliable, when the main thread has already decided that this thread
has work to do.

Task-number: QTBUG-3786
Change-Id: I1eac5d6c309daed7f483ac7a8074297bfda6ee32
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2013-10-31 17:45:58 +01:00
Sze Howe Koh 0d7d5ff5d0 Doc: Fix miscellaneous typos
Change-Id: Iaf0dd8974c3ad78beffa995c596a76fb3e4cceab
Reviewed-by: Jerome Pasion <jerome.pasion@digia.com>
Reviewed-by: Kurt Pattyn <pattyn.kurt@gmail.com>
2013-10-30 00:34:34 +01:00
Frederik Gladhorn 840f6a40e6 Merge remote-tracking branch 'origin/stable' into dev
Change-Id: Ie56539b2e0be611a363b5f15ae5412a78d6945a2
2013-10-24 12:48:42 +02:00
Sze Howe Koh a9d5627e6a Doc: Update, and reduce duplication of, QThread-related info
Added/Changed:
- Move content from the Thread Basics overview to the QThread class ref
- Rephrase bits for clarity
- Use more links

Removed:
- (threads-basics.qdoc) Warning against moveToThread(this): This usage
  came about when people tried to add slots to a QThread subclass. This
  patch adds a warning against the root cause.
- (threads-basics.qdoc) Note on sleep() et al.: They were made public in
  Qt 5.0.
- (threads-basics.qdoc) The strategy for managing member variables:
  Sounds error-prone. Pushing results through signals is safer.
- (qthread.cpp) The note about GUI classes: Irrelevant to QThread,
  and it's already mentioned elsewhere.

Change-Id: I6bc53cc22b929523f9976d2b920f94c02bd7273e
Reviewed-by: Geir Vattekar <geir.vattekar@digia.com>
Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
2013-10-21 02:12:11 +02:00
Frederik Gladhorn d0eb444a49 Merge remote-tracking branch 'origin/stable' into dev
Change-Id: Ib8cfeee7d9ca15e8ad520e428b72c200827a8628
2013-10-11 16:12:35 +02:00
Thiago Macieira 583d05863e Reorder the members in QThreadData to avoid padding holes
Before this change, this struct had size 104 and a total of 21 padding
bytes. Now it's down to 88 bytes and only 5 bytes of padding.

pahole report on a 64-bit system:
    class QAtomicInt          _ref;                  /*     0     4 */
    /* XXX 4 bytes hole, try to pack */
public:
    class QThread *            thread;               /*     8     8 */
    HANDLE                     threadId;             /*    16     8 */
    bool                       quitNow;              /*    24     1 */
    /* XXX 3 bytes hole, try to pack */
    int                        loopLevel;            /*    28     4 */
    class QAtomicPointer<QAbstractEventDispatcher> eventDispatcher; /*    32     8 */
    class QStack<QEventLoop*> eventLoops;            /*    40     8 */
    /* --- cacheline 1 boundary (64 bytes) --- */
    class QPostEventList      postEventList;         /*    48    32 */
    bool                       canWait;              /*    80     1 */
    /* XXX 7 bytes hole, try to pack */
    class QVector<void*>      tls;                   /*    88     8 */
    bool                       isAdopted;            /*    96     1 */
    /* size: 104, cachelines: 2, members: 11 */
    /* sum members: 90, holes: 3, sum holes: 14 */
    /* padding: 7 */

Change-Id: I1fc88e0b312f38eccdea440734fd37e0519285a2
Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
2013-10-08 02:45:16 +02:00
Jerome Pasion 4533cc9944 Doc: Adding mark-up to boolean default values.
Default values should have mark-up to denote that they are code.
This commit changes:
-"property is true" to "property is \c true".
-"Returns true" to "Returns \c true".
-"property is false" to "property is \c false".
-"returns true" to "returns \c true".
-"returns false" to "returns \c false".

src/3rdparty and non-documentation instances were ignored.

Task-number: QTBUG-33360
Change-Id: Ie87eaa57af947caa1230602b61c5c46292a4cf4e
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
Reviewed-by: Jerome Pasion <jerome.pasion@digia.com>
2013-10-08 00:46:27 +02:00