Go to file
Alex Trotsenko 89b0364cde QRingBuffer: avoid reallocations of the data
Since its initial implementation, QRingBuffer had the following
fragilities in the architecture:

  - it does not guarantee validity of the pointers, if new data will
    be appended. As an example, passing an address of the QRingBuffer
    chunk as a parameter to the WriteFileEx() function on Windows
    requires the stability of the pointer. So, we can't add new data
    to the QRingBuffer until the overlapped operation completed
    (related issues were fixed for QWindowsPipeWriter and QSerialPort
    in 5.6 branch by introducing an intermediate byte array);
  - inefficient reallocations in reserve(), if a shared chunk was
    inserted in the queue (we can get a reallocation in the place
    where we don't expect it:

      char *writePtr = buffers.last().data() + tail;  <-  line #133

    ).

Proposed solution is to avoid reallocation by allocating a new
block instead. That was accomplished by introducing a QRingChunk
class which operates on a fixed byte array and implements head/tail
pointers strategy for each individual buffer in the queue. So,
QRingBuffer is no longer dependent on QByteArray's internal
shrink/growth algorithms.

Change-Id: I05abab0ad78e22e4815a196037dfc6eff85325d1
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2017-12-30 10:15:10 +00:00
bin Fix shadow prefix framework builds 2017-11-02 15:23:18 +00:00
config.tests Centralize the x86 SIMD testing in one place 2017-11-30 08:30:42 +00:00
dist Add changes file for Qt 5.9.3 2017-11-13 08:12:02 +00:00
doc Doc: Minor corrections custom sort filter example 2017-11-29 14:09:18 +00:00
examples MimeTypeBrowser: avoid memleaks 2017-12-27 18:21:28 +00:00
lib Purge all fonts 2015-08-18 19:59:14 +00:00
mkspecs Generate gdb indexing for faster debugging on Linux 2017-12-19 11:50:12 +00:00
qmake doc: fix signatures and missing module headers 2017-12-14 13:37:51 +00:00
src QRingBuffer: avoid reallocations of the data 2017-12-30 10:15:10 +00:00
tests QRingBuffer: avoid reallocations of the data 2017-12-30 10:15:10 +00:00
util Replace Q_DECL_FINAL with final 2017-09-22 07:30:01 +00:00
.gitattributes Update the git-archive export options 2012-09-07 15:39:31 +02:00
.gitignore gitignore: don't ignore Info.plist templates for libraries 2017-11-23 07:07:48 +00:00
.qmake.conf Bump version 2017-09-04 18:07:28 +02:00
.tag Update the git-archive export options 2012-09-07 15:39:31 +02:00
config_help.txt Merge remote-tracking branch 'origin/5.10' into dev 2017-11-30 09:16:58 +01:00
configure Remove references to obsolete platforms 2017-11-05 06:33:53 +00:00
configure.bat configure: balk at any of {{,X}QMAKESPEC,QMAKE{PATH,FEATURES}} being set 2017-04-21 09:22:27 +00:00
configure.json Generate gdb indexing for faster debugging on Linux 2017-12-19 11:50:12 +00:00
configure.pri Centralize the x86 SIMD testing in one place 2017-11-30 08:30:42 +00:00
header.BSD Add new license header templates and license files 2016-01-14 20:43:46 +00:00
header.COMM Add header template for commercial only modules 2015-10-19 10:37:18 +00:00
header.FDL Add new license header templates and license files 2016-01-14 20:43:46 +00:00
header.GPL Add new license header templates and license files 2016-01-14 20:43:46 +00:00
header.GPL-EXCEPT Add new license header templates and license files 2016-01-14 20:43:46 +00:00
header.LGPL Add new license header templates and license files 2016-01-14 20:43:46 +00:00
header.LGPL3 Update copyright headers 2015-02-11 06:49:51 +00:00
header.LGPL3-COMM Update copyright headers 2015-02-11 06:49:51 +00:00
header.LGPL21 Update copyright headers 2015-02-11 06:49:51 +00:00
header.LGPL-NOGPL2 Add new license header templates and license files 2016-01-14 20:43:46 +00:00
header.LGPL-ONLY Update copyright headers 2015-02-11 06:49:51 +00:00
INSTALL Doc: Update links in INSTALL file 2015-02-16 09:06:41 +00:00
LGPL_EXCEPTION.txt Update copyright headers 2015-02-11 06:49:51 +00:00
LICENSE.FDL Initial import from the monolithic Qt. 2011-04-27 12:05:43 +02:00
LICENSE.GPL2 Add new license header templates and license files 2016-01-14 20:43:46 +00:00
LICENSE.GPL3 Add new license header templates and license files 2016-01-14 20:43:46 +00:00
LICENSE.GPL3-EXCEPT Add new license header templates and license files 2016-01-14 20:43:46 +00:00
LICENSE.GPLv3 Expand license scope from "Qt GUI Toolkit" to "Qt Toolkit" 2016-06-15 07:02:32 +00:00
LICENSE.LGPL3 Add new license header templates and license files 2016-01-14 20:43:46 +00:00
LICENSE.LGPLv3 Expand license scope from "Qt GUI Toolkit" to "Qt Toolkit" 2016-06-15 07:02:32 +00:00
LICENSE.LGPLv21 Expand license scope from "Qt GUI Toolkit" to "Qt Toolkit" 2016-06-15 07:02:32 +00:00
LICENSE.PREVIEW.COMMERCIAL Add new license header templates and license files 2016-01-14 20:43:46 +00:00
qtbase.pro nuke configure -host-option 2016-12-13 18:55:59 +00:00
sync.profile Add support for Windows UI Automation 2017-11-14 23:31:04 +00:00