By default, Bugzilla does not search the list of RESOLVED bugs.
You can force it to do so by putting the upper-case word ALL in front of your search query, e.g.: ALL tdelibs
We recommend searching for bugs this way, as you may discover that your bug has already been resolved and fixed in a later release.
Bug 2107 - Build issue: TQT3 on openbsd
Summary: Build issue: TQT3 on openbsd
Status: PATCHAVAIL
Alias: None
Product: TDE
Classification: Unclassified
Component: qt3 (show other bugs)
Version: R14.0.x [Trinity]
Hardware: All Other
: P5 normal
Assignee: Francois Andriot
URL:
Depends on:
Blocks: 2968
  Show dependency treegraph
 
Reported: 2014-09-06 08:50 CDT by Francois Andriot
Modified: 2018-08-30 02:52 CDT (History)
6 users (show)

See Also:
Compiler Version:
TDE Version String:
Application Version:
Application Name:


Attachments
TQT3: fix qmake shared library naming (1/2) (729 bytes, patch)
2014-09-06 08:51 CDT, Francois Andriot
Details | Diff
TQT3: fix qmake shared library naming (2/2) (4.20 KB, patch)
2014-09-06 08:52 CDT, Francois Andriot
Details | Diff
TQT3: update qiconview (1/2) (349 bytes, patch)
2014-09-06 08:55 CDT, Francois Andriot
Details | Diff
TQT3: update qiconview (2/2) (8.89 KB, patch)
2014-09-06 08:55 CDT, Francois Andriot
Details | Diff
TQT3: fix FTBFS because TQStyleControlElementData constructor (539 bytes, patch)
2014-09-06 08:57 CDT, Francois Andriot
Details | Diff
TQT3: add long long int support to tqtextstream (1/2) (738 bytes, patch)
2014-09-06 08:57 CDT, Francois Andriot
Details | Diff
TQT3: add long long int support to tqtextstream (2/2) (1.70 KB, patch)
2014-09-06 08:58 CDT, Francois Andriot
Details | Diff
TQT3: fix potential segmentation fault in qvaluelist (374 bytes, patch)
2014-09-06 08:59 CDT, Francois Andriot
Details | Diff
TQT3: fix security issue in qfile (1/2) (1.82 KB, patch)
2014-09-06 09:00 CDT, Francois Andriot
Details | Diff
TQT3: fix security issue in qfile (2/2) (1.42 KB, patch)
2014-09-06 09:00 CDT, Francois Andriot
Details | Diff
TQT3: fix FTBFS because invalid data conversion in qmutex (627 bytes, patch)
2014-09-06 09:01 CDT, Francois Andriot
Details | Diff
TQT3: fix library naming in TQT Plugins (382 bytes, patch)
2014-09-06 09:02 CDT, Francois Andriot
Details | Diff
TQT3: fix FTBFS because of Linux specific code in qstring (798 bytes, patch)
2014-09-06 09:03 CDT, Francois Andriot
Details | Diff
TQT3: add repaint optimization to tqprogressbar (1/2) (644 bytes, patch)
2014-09-06 09:03 CDT, Francois Andriot
Details | Diff
TQT3: add repaint optimization to tqprogressbar (2/2) (2.60 KB, patch)
2014-09-06 09:04 CDT, Francois Andriot
Details | Diff
TQT3: fix FTBFS because of Linux specific code in qlineedit (409 bytes, patch)
2014-09-06 09:04 CDT, Francois Andriot
Details | Diff
TQT3: modify the behavior of the rubber selection (2.20 KB, patch)
2014-09-15 21:49 CDT, Slávek Banko
Details | Diff
tqt3 examples/threads/prodcons (6.25 KB, text/plain)
2015-10-13 04:38 CDT, Nikolaus Klepp
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Francois Andriot 2014-09-06 08:50:11 CDT
This bug report is intented to collect patches needed to build TQT3 on openbsd.
Comment 1 Francois Andriot 2014-09-06 08:51:48 CDT
Created attachment 2134 [details]
TQT3: fix qmake shared library naming (1/2)
Comment 2 Francois Andriot 2014-09-06 08:52:07 CDT
Created attachment 2135 [details]
TQT3: fix qmake shared library naming (2/2)
Comment 3 Francois Andriot 2014-09-06 08:55:31 CDT
Created attachment 2136 [details]
TQT3: update qiconview (1/2)

Not sure what this patch is intended for.
Comment 4 Francois Andriot 2014-09-06 08:55:49 CDT
Created attachment 2137 [details]
TQT3: update qiconview (2/2)
Comment 5 Francois Andriot 2014-09-06 08:57:14 CDT
Created attachment 2138 [details]
TQT3: fix FTBFS because TQStyleControlElementData constructor

There is a weird FTBFS with the private constructor.

g++ -c -pipe -I/usr/local/include/mysql -I/usr/local/include/postgresql -I/usr/local/include/postgresql/server -I/usr/local/include -I/usr/X11R6/include/freetype2 -I/usr/local/include -fno-exceptions -I/usr/local/include/glib-2.0 -I/usr/local/lib/glib-2.0/include -I/usr/local/include -pthread -I/usr/local/include/glib-2.0 -I/usr/local/lib/glib-2.0/include -I/usr/local/include -Wall -W -O2 -pthread -fPIC -DQT_SHARED -DQT_TABLET_SUPPORT -DQT_NO_DEBUG -DQT_THREAD_SUPPORT -DQT_THREAD_SUPPORT -DQT_NO_NIS -D_LARGEFILE_SOURCE -D_LARGE_FILES -D_FILE_OFFSET_BITS=64 -DQT_DLOPEN_OPENGL -DQT_NO_IMAGEIO_MNG -DQT_BUILTIN_GIF_READER=1 -DQT_NO_STYLE_MAC -DQT_NO_STYLE_AQUA -DQT_NO_STYLE_INTERLACE -DQT_NO_STYLE_WINDOWSXP -DQT_NO_STYLE_COMPACT -DQT_NO_STYLE_POCKETPC -DQT_USE_GLIBMAINLOOP -I/usr/ports/pobj/tqt3-3.5.0/trinity-tqt3-14.0.0~pre203+85e2ff9c/mkspecs/openbsd-g++ -I. -I/usr/X11R6/include/freetype2 -I3rdparty/opentype -I/usr/local/include -I../include -I/usr/X11R6/include -I.moc/release-shared-mt/ -o .obj/release-shared-mt/qstyle.o kernel/qstyle.cpp
kernel/ntqstyle.h: In member function 'virtual bool TQStyle::widgetActionRequest(const TQStyleControlElementData&, TQStyle::ControlElementFlags, void*, TQStyle::WidgetActionRequest, TQStyleWidgetActionRequestData)':
kernel/ntqstyle.h:296: error: 'TQStyleControlElementData::TQStyleControlElementData(const TQStyleControlElementData&)' is private
kernel/qstyle.cpp:2487: error: within this context
kernel/ntqstyle.h: In member function 'void TQStyle::acceleratorKeypressEventMonitor(TQObject*, TQEvent*)':
kernel/ntqstyle.h:296: error: 'TQStyleControlElementData::TQStyleControlElementData(const TQStyleControlElementData&)' is private
kernel/qstyle.cpp:2562: error: within this context
kernel/ntqstyle.h:296: error: 'TQStyleControlElementData::TQStyleControlElementData(const TQStyleControlElementData&)' is private
kernel/qstyle.cpp:2569: error: within this context
kernel/ntqstyle.h:296: error: 'TQStyleControlElementData::TQStyleControlElementData(const TQStyleControlElementData&)' is private
kernel/qstyle.cpp:2575: error: within this context
kernel/ntqstyle.h: In member function 'bool TQStyle::acceleratorsShown() const':
kernel/ntqstyle.h:296: error: 'TQStyleControlElementData::TQStyleControlElementData(const TQStyleControlElementData&)' is private
kernel/qstyle.cpp:2589: error: within this context
kernel/qstyle.cpp: In member function 'T& TQMap<Key, T>::operator[](const Key&) [with Key = void*, T = TQStyleControlElementData]':
kernel/qstyle.cpp:2273:   instantiated from here
kernel/qstyle.cpp:2848: error: 'TQStyleControlElementData::TQStyleControlElementData(const TQStyleControlElementData&)' is private
../include/ntqmap.h:807: error: within this context
Makefile:6433: recipe for target '.obj/release-shared-mt/qstyle.o' failed
gmake[2]: *** [.obj/release-shared-mt/qstyle.o] Error 1
gmake[2]: Leaving directory '/usr/ports/pobj/tqt3-3.5.0/trinity-tqt3-14.0.0~pre203+85e2ff9c/src'
Makefile:40: recipe for target 'sub-src' failed
gmake[1]: *** [sub-src] Error 2
gmake[1]: Leaving directory '/usr/ports/pobj/tqt3-3.5.0/trinity-tqt3-14.0.0~pre203+85e2ff9c'
Makefile:8: recipe for target 'init' failed
gmake: *** [init] Error 2


I don't understand why "TQStyleControlElementData()" (kernel/qstyle.cpp:2562) is using this private constructor instead of the public one.
Comment 6 Francois Andriot 2014-09-06 08:57:45 CDT
Created attachment 2139 [details]
TQT3: add long long int support to tqtextstream (1/2)
Comment 7 Francois Andriot 2014-09-06 08:58:06 CDT
Created attachment 2140 [details]
TQT3: add long long int support to tqtextstream (2/2)
Comment 8 Francois Andriot 2014-09-06 08:59:08 CDT
Created attachment 2141 [details]
TQT3: fix potential segmentation fault in qvaluelist
Comment 9 Francois Andriot 2014-09-06 09:00:11 CDT
Created attachment 2142 [details]
TQT3: fix security issue in qfile (1/2)
Comment 10 Francois Andriot 2014-09-06 09:00:29 CDT
Created attachment 2143 [details]
TQT3: fix security issue in qfile (2/2)
Comment 11 Francois Andriot 2014-09-06 09:01:17 CDT
Created attachment 2144 [details]
TQT3: fix FTBFS because invalid data conversion in qmutex
Comment 12 Francois Andriot 2014-09-06 09:02:19 CDT
Created attachment 2145 [details]
TQT3: fix library naming in TQT Plugins
Comment 13 Francois Andriot 2014-09-06 09:03:08 CDT
Created attachment 2146 [details]
TQT3: fix FTBFS because of Linux specific code in qstring
Comment 14 Francois Andriot 2014-09-06 09:03:58 CDT
Created attachment 2147 [details]
TQT3: add repaint optimization to tqprogressbar (1/2)
Comment 15 Francois Andriot 2014-09-06 09:04:13 CDT
Created attachment 2148 [details]
TQT3: add repaint optimization to tqprogressbar (2/2)
Comment 16 Francois Andriot 2014-09-06 09:04:38 CDT
Created attachment 2149 [details]
TQT3: fix FTBFS because of Linux specific code in qlineedit
Comment 17 Timothy Pearson 2014-09-06 13:02:33 CDT
Wow, lots of good stuff here!  Let me review these, then test these on my Linux system to see if there is any ABI breakage.
Comment 18 Slávek Banko 2014-09-06 17:55:58 CDT
Comment on attachment 2144 [details]
TQT3: fix FTBFS because invalid data conversion in qmutex

For this patch there is no doubt.

Pushed to GIT in hash a28cbf48 (qt3) and 6d4396b3 (tqt3).
Comment 19 Slávek Banko 2014-09-06 17:56:52 CDT
Comment on attachment 2146 [details]
TQT3: fix FTBFS because of Linux specific code in qstring

For this patch there is no doubt.

Pushed to GIT in hash e1751395 (qt3) and 9c2ce91a (tqt3).
Comment 20 Slávek Banko 2014-09-06 17:57:03 CDT
Comment on attachment 2149 [details]
TQT3: fix FTBFS because of Linux specific code in qlineedit

For this patch there is no doubt.

Pushed to GIT in hash e1751395 (qt3) and 9c2ce91a (tqt3).
Comment 21 Slávek Banko 2014-09-06 18:04:31 CDT
(In reply to Francois Andriot from comment #12)
> Created attachment 2145 [details]
> TQT3: fix library naming in TQT Plugins

François, in the added filter should be a semicolon between values?
Comment 23 Francois Andriot 2014-09-07 02:53:54 CDT
(In reply to Slávek Banko from comment #21)
> (In reply to Francois Andriot from comment #12)
> > Created attachment 2145 [details]
> > TQT3: fix library naming in TQT Plugins
> 
> François, in the added filter should be a semicolon between values?

Well, the original openbsd patch has no semicolon, but I bet this is a mistake.

According to the example in the documentation, there should be a semicolon:
https://www.trinitydesktop.org/docs/qt3/statistics-example.html#x2781

So, if you push the patch, please add the semicolon.
Comment 24 Francois Andriot 2014-09-07 03:07:04 CDT
(In reply to Slávek Banko from comment #22)
> It seems that I found the patches related to attachment 2136 [details] and
> attachment 2137 [details].
> 
> These patches contain an explanation of its purpose:
> http://area51.pcbsd.org/branches/kde-4.1/x11-toolkits/qt33/files/0017-
> qiconview-ctrl_rubber.patch
> http://area51.pcbsd.org/branches/kde-4.1/x11-toolkits/qt33/files/0049-
> qiconview-rubber_on_move.diff
> http://area51.pcbsd.org/branches/kde-4.1/x11-toolkits/qt33/files/0046-
> qiconview-no-useless-scrollbar.diff

OK, in case the patches are pushed, I think you'd better go with these original patches one by one, just in case I've missed something in mine...
Comment 25 Francois Andriot 2014-09-07 03:28:48 CDT
Comment on attachment 2141 [details]
TQT3: fix potential segmentation fault in qvaluelist

I've found the original patch:
0035-qvaluelist-streaming-operator.patch

qt-bugs@ issue: 40192
applied: no
author: Frerich Raabe <raabe@kde.org>

This patch should fix QValueList's streaming operator>> for cases where
the stream operates on a byte array smaller than a Q_UINT32 (for instance,
QByteArray objects which are 0-3 bytes in size). It used to read one bogus
item because the loop would get executed once even if reading the 'c'
variable failed.
Comment 26 Timothy Pearson 2014-09-12 11:29:04 CDT
(In reply to Slávek Banko from comment #22)
> It seems that I found the patches related to attachment 2136 [details] and
> attachment 2137 [details].
> 
> These patches contain an explanation of its purpose:
> http://area51.pcbsd.org/branches/kde-4.1/x11-toolkits/qt33/files/0017-
> qiconview-ctrl_rubber.patch

I'd hold off on pushing this patch as it modifies core user-visible behavior.  This change is probably something that needs to be discussed on the mailing list before any decisions are made.
Comment 27 Timothy Pearson 2014-09-12 11:54:06 CDT
Comment on attachment 2138 [details]
TQT3: fix FTBFS because TQStyleControlElementData constructor

This patch should not be committed to GIT.  The checks are there for a reason, removing them will introduce severe performance regressions.  A (failed) build log with this patch not applied would be most helpful in tracing the real cause of the FTBFS.
Comment 28 Timothy Pearson 2014-09-12 11:55:29 CDT
(In reply to Timothy Pearson from comment #27)
> Comment on attachment 2138 [details]
> TQT3: fix FTBFS because TQStyleControlElementData constructor
> 
> This patch should not be committed to GIT.  The checks are there for a
> reason, removing them will introduce severe performance regressions.  A
> (failed) build log with this patch not applied would be most helpful in
> tracing the real cause of the FTBFS.

Looks like I missed the log above in Comment 5.  Either way this patch must not be added to GIT.
Comment 29 Timothy Pearson 2014-09-12 13:01:14 CDT
Comment on attachment 2134 [details]
TQT3: fix qmake shared library naming (1/2)

Verified; pushed to GIT in hashes 82843da (qt3) and b478472 (tqt3)
Comment 30 Timothy Pearson 2014-09-12 13:05:39 CDT
Comment on attachment 2135 [details]
TQT3: fix qmake shared library naming (2/2)

Verified; pushed to GIT in hashes 82843da (qt3) and b478472 (tqt3)
Comment 31 Timothy Pearson 2014-09-12 13:06:04 CDT
Comment on attachment 2139 [details]
TQT3: add long long int support to tqtextstream (1/2)

Verified; pushed to GIT in hashes 82843da (qt3) and b478472 (tqt3)
Comment 32 Timothy Pearson 2014-09-12 13:06:36 CDT
Comment on attachment 2140 [details]
TQT3: add long long int support to tqtextstream (2/2)

Verified; pushed to GIT in hashes 82843da (qt3) and b478472 (tqt3)
Comment 33 Timothy Pearson 2014-09-12 13:08:46 CDT
Comment on attachment 2145 [details]
TQT3: fix library naming in TQT Plugins

Verified; pushed to GIT in hashes 82843da (qt3) and b478472 (tqt3)
Comment 34 Timothy Pearson 2014-09-12 13:09:14 CDT
Comment on attachment 2141 [details]
TQT3: fix potential segmentation fault in qvaluelist

Verified; pushed to GIT in hashes 82843da (qt3) and b478472 (tqt3)
Comment 35 Timothy Pearson 2014-09-12 13:21:40 CDT
(In reply to Francois Andriot from comment #10)
> Created attachment 2143 [details]
> TQT3: fix security issue in qfile (2/2)

I'd like to see some additional information on exactly what the errant behaviour is and how it creates a problem.  On first glance the patch appears to reset the file pointer on changing from R to W or from W to R; my main concerns are a.) I don't understand the security flaw in the original code and b.) this is a behavior change that has the potential to introduce subtle and hard to debug issues into many TQt3/TDE applications.  At minimum this change will need to be documented in the TQFile documentation pages (provided of course that this patch is not repairing a fault and bringing TQFile operating back in line with the documentation!).
Comment 36 Slávek Banko 2014-09-14 20:50:07 CDT
(In reply to Timothy Pearson from comment #35)
> (In reply to Francois Andriot from comment #10)
> > Created attachment 2143 [details]
> > TQT3: fix security issue in qfile (2/2)
> 
> I'd like to see some additional information on exactly what the errant
> behaviour is and how it creates a problem.  On first glance the patch
> appears to reset the file pointer on changing from R to W or from W to R; my
> main concerns are a.) I don't understand the security flaw in the original
> code and b.) this is a behavior change that has the potential to introduce
> subtle and hard to debug issues into many TQt3/TDE applications.  At minimum
> this change will need to be documented in the TQFile documentation pages
> (provided of course that this patch is not repairing a fault and bringing
> TQFile operating back in line with the documentation!).

I looked at the patch again, and I realized that fseek(fh, 0, SEEK_CUR) in fact, the  pointer of the current position does not move nowhere at all. This means that it should not be an impact on the behavior of programs. I found the original patch with a brief description:

https://github.com/avsm/openbsd-ports/commit/398d8cc00ebef59cf4be2dc415f407d3cc36efac
Comment 37 Slávek Banko 2014-09-14 21:04:57 CDT
(In reply to Slávek Banko from comment #36)
> (In reply to Timothy Pearson from comment #35)
> > (In reply to Francois Andriot from comment #10)
> > > Created attachment 2143 [details]
> > > TQT3: fix security issue in qfile (2/2)
> > 
> > I'd like to see some additional information on exactly what the errant
> > behaviour is and how it creates a problem.  On first glance the patch
> > appears to reset the file pointer on changing from R to W or from W to R; my
> > main concerns are a.) I don't understand the security flaw in the original
> > code and b.) this is a behavior change that has the potential to introduce
> > subtle and hard to debug issues into many TQt3/TDE applications.  At minimum
> > this change will need to be documented in the TQFile documentation pages
> > (provided of course that this patch is not repairing a fault and bringing
> > TQFile operating back in line with the documentation!).
> 
> I looked at the patch again, and I realized that fseek(fh, 0, SEEK_CUR) in
> fact, the  pointer of the current position does not move nowhere at all.
> This means that it should not be an impact on the behavior of programs. I
> found the original patch with a brief description:
> 
> https://github.com/avsm/openbsd-ports/commit/
> 398d8cc00ebef59cf4be2dc415f407d3cc36efac

Nice - now I realized one more thing - the patch can not work at all!

At initialization d->lastAccess is set to ACCESS_NONE. But any other changes d->lastAccess are inside the conditions d->lastAccess == ACCESS_WRITE or d->lastAccess == ACCESS_READ. That is, d->lastAccess will never take values ​​other than ACCESS_NONE == patch has no effect.

There is something wrong in the original patch :)
Comment 38 Timothy Pearson 2014-09-14 23:50:37 CDT
(In reply to Slávek Banko from comment #36)
> (In reply to Timothy Pearson from comment #35)
> > (In reply to Francois Andriot from comment #10)
> > > Created attachment 2143 [details]
> > > TQT3: fix security issue in qfile (2/2)
> > 
> > I'd like to see some additional information on exactly what the errant
> > behaviour is and how it creates a problem.  On first glance the patch
> > appears to reset the file pointer on changing from R to W or from W to R; my
> > main concerns are a.) I don't understand the security flaw in the original
> > code and b.) this is a behavior change that has the potential to introduce
> > subtle and hard to debug issues into many TQt3/TDE applications.  At minimum
> > this change will need to be documented in the TQFile documentation pages
> > (provided of course that this patch is not repairing a fault and bringing
> > TQFile operating back in line with the documentation!).
> 
> I looked at the patch again, and I realized that fseek(fh, 0, SEEK_CUR) in
> fact, the  pointer of the current position does not move nowhere at all.
> This means that it should not be an impact on the behavior of programs. I
> found the original patch with a brief description:
> 
> https://github.com/avsm/openbsd-ports/commit/
> 398d8cc00ebef59cf4be2dc415f407d3cc36efac

Ah, my bad.  Thanks for correcting that.

If the patch is useless per Comment 37, should we just reject it and mark it obsolete?  I'd like input from Francois before doing so as it is BSD related, but this is my current intent.

Thanks!
Comment 39 Francois Andriot 2014-09-15 00:01:11 CDT
We probably can reject this patch.
If there is no real known issue to fix, then this patch is not necessary anyway.
Comment 40 Slávek Banko 2014-09-15 15:10:22 CDT
(In reply to Francois Andriot from comment #39)
> We probably can reject this patch.
> If there is no real known issue to fix, then this patch is not necessary
> anyway.

To patch performs some function, it would have to be moved setting: "d->lastAccess = ACCESS_READ;" and "d->lastAccess = ACCESS_WRITE;" outside the conditions.

There are two questions: 
1) Does this patch (after repair) make sense?
2) We should report to the OpenBSD team that this patch is wrong?
Comment 41 Slávek Banko 2014-09-15 21:24:04 CDT
TQProgressBar repaint optimization pushed to GIT in hash 0c5a2640 (TQt3) and 9f882f9d (Qt3).
Comment 42 Slávek Banko 2014-09-15 21:49:48 CDT
Created attachment 2244 [details]
TQT3: modify the behavior of the rubber selection

Parts of previous patches pushed to GIT:

+ Remove unnecessary scrollbar in TQIconView - 0cce3b0e (TQt3), 36ee984c (Qt3)

+ Fix unwanted toggling TQIconViewItem focus on click - baea23ba (TQt3), fbc4cf8e (Qt3)

The remainder, which modifies the behavior of rubber selection attached as the new patch.
Comment 43 Slávek Banko 2014-09-15 21:52:20 CDT
For completeness, I add original patch description:

This patch modifies the behavior of the rubber selection.
Now Shift-rubber behaves like the old Ctrl-rubber.
And now Ctrl-rubber toggles the state of the icons.
This is more consistant with other iconview (Nautilus, Win Explorer, ...)
and with TQt itself (Ctrl-click toggle the state of an icon).
Comment 44 Timothy Pearson 2014-09-15 23:27:25 CDT
(In reply to Slávek Banko from comment #41)
> TQProgressBar repaint optimization pushed to GIT in hash 0c5a2640 (TQt3) and
> 9f882f9d (Qt3).

It's a bit of a nit, but I was holding off on pushing that patch until I had renamed this:

requireRepaint

to this:

repaintRequired

It's somewhat better English that way, and matches the rest of the codebase better. :)

Tim
Comment 45 Slávek Banko 2014-09-16 13:17:15 CDT
(In reply to Timothy Pearson from comment #44)
> (In reply to Slávek Banko from comment #41)
> > TQProgressBar repaint optimization pushed to GIT in hash 0c5a2640 (TQt3) and
> > 9f882f9d (Qt3).
> 
> It's a bit of a nit, but I was holding off on pushing that patch until I had
> renamed this:
> 
> requireRepaint
> 
> to this:
> 
> repaintRequired
> 
> It's somewhat better English that way, and matches the rest of the codebase
> better. :)
> 
> Tim

I made a little improvement of original patch - method now not needs argument. And also performed above mentioned renaming :)
Comment 46 Nikolaus Klepp 2015-10-13 04:38:35 CDT
Created attachment 2577 [details]
tqt3 examples/threads/prodcons