Difference between revisions of "Effort/Implement Basic Threading-Architecture"

From Apache OpenOffice Wiki
Jump to: navigation, search
(Implement Basic Threading Architecture: Added mission, problem and solution statement.)
m (Dependencies: Fixed title layout ...)
 
(16 intermediate revisions by the same user not shown)
Line 1: Line 1:
Status: in progress
+
Type: Effort  Status: in progress
  
==Implement Basic Threading Architecture==
+
The OOo [[Uno/Term/Threading-Architecture|threading-architecture]] is going to be well defined, many little changes need to be done to get implemented what is specified as the [[Spec/Threading-Architecture|threading-architecture]].  
The OOo threading is going to be well defined, many little changes need to be done to get implemented what is specified as the [[Spec/Architecture/Threading|threading architecture]].  
+
  
===Problem===
+
==Problem==
 
The biggest problem is the size of the code base. It is hard to actually get an overview where thread related constructs are used. Typical usages are:
 
The biggest problem is the size of the code base. It is hard to actually get an overview where thread related constructs are used. Typical usages are:
 
* use a mutex to protect an object,
 
* use a mutex to protect an object,
 
* use a thread to do something in the background,
 
* use a thread to do something in the background,
* use a thread to encapsularte thread affinities (e.g. in dtrans).
+
* use a thread to encapsulate thread affinities (e.g. in dtrans).
 
Some usages are more implicit:
 
Some usages are more implicit:
* post a user message into the VCL event queue, to delegate the execution of a particular operation into the "main" thread,
+
* post a user message into the [[VCL]] event queue, to delegate the execution of a particular operation into the "main" thread,
 
* use the "global" mutex to do some initialization,
 
* use the "global" mutex to do some initialization,
* use the "Solar Mutex" to protect a particular object,
+
* use the [[Terms/Solar Mutex|Solar Mutex]] to protect a particular object,
* rely on VCL/Win to enter the <code>getMessage</code> loop in the main thread (DDE).
+
* rely on [[VCL]]:Win32 to enter the <code>getMessage</code> loop in the main thread (DDE).
  
===Solution===
+
==Solution==
Actually grep for thread related Uno code and change it, if needed. Change the environments of all possible components to "cpp:unsafe".
+
Actually grep for thread related [[Uno]] code and change it, if needed. Change the environments of all possible components to <code>"c++:unsafe"</code>.
  
====Threads====
+
===Threads===
 
* vos timer thread
 
* vos timer thread
 
* dtrans threads (clipboard and D&D)
 
* dtrans threads (clipboard and D&D)
Line 26: Line 25:
 
* Win32: affinity thread
 
* Win32: affinity thread
 
* office acceptor thread - second process thread
 
* office acceptor thread - second process thread
* uno acceptor thread
+
* Uno acceptor thread
 
* io - pump thread
 
* io - pump thread
* package manager deployment gui thread
+
* package manager deployment GUI thread
* UNO job threads
+
* Uno job threads
 +
* Printer discovery
  
====Components====
+
===Components===
  
====Libraries====
+
===Libraries===
  
====Applications====
+
===Applications===
  
===Tasks===
+
==Tasks==
Convert the Office Components to be [[Uno/Term/Thread Unsafe|thread unsafe]]
+
{|border="1" cellspacing="0" class="wikitable"
* [http://dba.openoffice.org/source/browse/dba/connectivity/ module dba/connectivity]:
+
|- style="background:#efefef;"
** Make ZConnectionPool / OPoolTimer thread enter the default thread unsafe environment before invalidating the pooled connections.
+
! Title !! State
** Declare exported services as "thread unsafe":
+
|-
* [http://framework.openoffice.org/source/browse/framework/desktop module framework/desktop]:
+
| Declare be [[Uno/Term/Thread Unsafe|thread-unsafe]] [http://framework.openoffice.org/source/browse/framework/desktop module framework/desktop] || UTF2
* [http://framework.openoffice.org/source/browse/framework/sfx2 module framework/sfx2]:
+
|-
** Declare exported services as "thread unsafe"
+
| Declare be [[Uno/Term/Thread Unsafe|thread-unsafe]] [http://framework.openoffice.org/source/browse/framework/sfx2 module framework/sfx2] || UTF2
* [http://framework.openoffice.org/source/browse/framework/filter module framework/filter]:
+
|-
** Declare exported services as "thread unsafe":
+
| Declare be [[Uno/Term/Thread Unsafe|thread-unsafe]] [http://framework.openoffice.org/source/browse/framework/filter module framework/filter] || UTF2
* [http://graphics.openoffice.org/source/browse/graphics/goodies module graphics/goodies]:
+
|-
** Declare exported services as "thread unsafe":
+
| Declare be [[Uno/Term/Thread Unsafe|thread-unsafe]] [http://graphics.openoffice.org/source/browse/graphics/goodies module graphics/goodies] || UTF2
* [http://graphics.openoffice.org/source/browse/graphics/svx module graphics/svx]:
+
|-
** Declare exported services as "thread unsafe"
+
| Declare be [[Uno/Term/Thread Unsafe|thread-unsafe]] [http://graphics.openoffice.org/source/browse/graphics/svx module graphics/svx] || UTF2
* [http://gsl.openoffice.org/source/browse/gsl/toolkit module gsl/toolkit]:
+
|-
** Declare exported services as "thread unsafe"
+
| Declare be [[Uno/Term/Thread Unsafe|thread-unsafe]] [http://gsl.openoffice.org/source/browse/gsl/toolkit module gsl/toolkit] || UTF2
* [http://l10n.openoffice.org/source/browse/l10n/i18npool module l10n/i18npool]:
+
|-
** Declare exported services as "thread unsafe"
+
| Declare be [[Uno/Term/Thread Unsafe|thread-unsafe]] [http://l10n.openoffice.org/source/browse/l10n/i18npool module l10n/i18npool] || UTF2
* [http://sw.openoffice.org/source/browse/sw/linguistic module sw/linguistic]:
+
|-
** Declare exported services as "thread unsafe"
+
| Declare be [[Uno/Term/Thread Unsafe|thread-unsafe]] [http://sw.openoffice.org/source/browse/sw/linguistic module sw/linguistic] || UTF2
* [http://sw.openoffice.org/source/browse/sw/sw module sw/sw]:
+
|-
** Declare exported services as "thread unsafe"
+
| Declare be [[Uno/Term/Thread Unsafe|thread-unsafe]] [http://sw.openoffice.org/source/browse/sw/sw module sw/sw] || UTF2
* [http://ucb.openoffice.org/source/browse/ucb/uui module ucb/uui]:
+
|-
** Declare exported services as "thread unsafe"
+
| Declare be [[Uno/Term/Thread Unsafe|thread-unsafe]] [http://ucb.openoffice.org/source/browse/ucb/uui module ucb/uui] || UTF2
* [http://util.openoffice.org/source/browse/util/comphelper/ module util/comphelper]:
+
|-
** AsyncEventNotifier / EventNotifierImpl - Already call "getComponent" at the "IEventProcessor" during construction of the "AsyncEventNotifier" and remember the object in a "free" reference.
+
| Declare be [[Uno/Term/Thread Unsafe|thread-unsafe]] [http://util.openoffice.org/source/browse/util/comphelper/ module util/comphelper] || UTF2
** Declare exported services as "thread unsafe":
+
|-
* [http://util.openoffice.org/source/browse/util/xmlhelp module util/xmlhelp]:
+
| Declare be [[Uno/Term/Thread Unsafe|thread-unsafe]] [http://util.openoffice.org/source/browse/util/xmlhelp module util/xmlhelp] || UTF2
** Declare exported services as "thread unsafe"
+
|-
* [http://util.openoffice.org/source/browse/util/unotools module util/unotools]:
+
| Declare be [[Uno/Term/Thread Unsafe|thread-unsafe]] [http://util.openoffice.org/source/browse/util/unotools module util/unotools] || UTF2
** Declare exported services as "thread unsafe"
+
|-
* [http://util.openoffice.org/source/browse/util/svtools module util/svtools]:
+
| Declare be [[Uno/Term/Thread Unsafe|thread-unsafe]] [http://util.openoffice.org/source/browse/util/svtools module util/svtools] || UTF2
** Declare exported services as "thread unsafe"
+
|-
* [http://util.openoffice.org/source/browse/util/extensions module util/extensions]:
+
| Declare be [[Uno/Term/Thread Unsafe|thread-unsafe]] [http://util.openoffice.org/source/browse/util/extensions module util/extensions] || UTF2
** Declare exported services as "thread unsafe":
+
|-
* [http://util.openoffice.org/source/browse/util/fileaccess module util/fileaccess]:
+
| Declare be [[Uno/Term/Thread Unsafe|thread-unsafe]] [http://util.openoffice.org/source/browse/util/fileaccess module util/fileaccess] || UTF2
** Declare exported services as "thread unsafe":
+
|-
* [http://xml.openoffice.org/source/browse/xml/xmloff module xml/xmloff]:
+
| Declare be [[Uno/Term/Thread Unsafe|thread-unsafe]] [http://xml.openoffice.org/source/browse/xml/xmloff module xml/xmloff] || UTF2
** Declare exported services as "thread unsafe"
+
|-
* [http://xml.openoffice.org/source/browse/xml/package module xml/package]:
+
| Declare be [[Uno/Term/Thread Unsafe|thread-unsafe]] [http://xml.openoffice.org/source/browse/xml/package module xml/package] || UTF2
** Declare exported services as "thread unsafe"
+
|-
* [http://xml.openoffice.org/source/browse/xml/sax module xml/sax]:
+
| Declare be [[Uno/Term/Thread Unsafe|thread-unsafe]] [http://xml.openoffice.org/source/browse/xml/sax module xml/sax] || UTF2
** Declare exported services as "thread unsafe"
+
|-
 +
| Declare be [[Uno/Term/Thread Unsafe|thread-unsafe]] [http://dba.openoffice.org/source/browse/dba/connectivity/ module dba/connectivity] || UTF2
 +
|-
 +
| Make ZConnectionPool / OPoolTimer thread enter the default [[Uno/Term/Thread Unsafe|thread-unsafe]] environment before invalidating the pooled connections. || UTF2
 +
|-
 +
| AsyncEventNotifier / EventNotifierImpl - Already call "getComponent" at the "IEventProcessor" during construction of the "AsyncEventNotifier" and remember the object in a "free" reference || utf2
 +
|-
 +
| [[Effort/Make VCL Thread-Transparent]] || in progress
 +
|-
 +
|}
  
 
+
==Dependencies==
=== Dependencies ===
+
{|border="1" cellspacing="0" class="wikitable"
* [[Effort/Making_VCL_Thread_Transparent|Make VCL Thread Transparent]]
+
|- style="background:#efefef;"
* [[Effort/Make DDE Thread Transparent|Make DDE Thread Transparent]]
+
! Area !! Title !! State !! [[CWS]]
* [[Effort/Make D&D Thread Transparent|Make D&D Thread Transparent]]
+
|-
* [[Effort/Make Clipboard Thread Transparent|Make Clipboard Thread Transparent]]
+
| [[Uno/Cpp|C++ Uno]] || [[Uno/Effort/Binary/Extend_Threading-Model|Extended Binary Uno Threading-Model]] || style="background:lightgreen;"|ready for QA || {{Uno/CWS|SRC680|bunoexttm}}
 +
|-
 +
| [[VCL]] || [[Effort/Make_VCL_Thread-Transparent|Thread-Transparent VCL]] || style="background:yellow;"|in progress || {{Uno/CWS|SRC680|vclthreadtransparency1}}<br>{{Uno/CWS|SRC680|vclthreadtransparency2}}
 +
|}
  
  
 
[[Category:Effort]]
 
[[Category:Effort]]
 +
[[Category:Architecture]]
 +
[[Category:Multi-Threading]]

Latest revision as of 14:07, 13 July 2007

Type: Effort Status: in progress

The OOo threading-architecture is going to be well defined, many little changes need to be done to get implemented what is specified as the threading-architecture.

Problem

The biggest problem is the size of the code base. It is hard to actually get an overview where thread related constructs are used. Typical usages are:

  • use a mutex to protect an object,
  • use a thread to do something in the background,
  • use a thread to encapsulate thread affinities (e.g. in dtrans).

Some usages are more implicit:

  • post a user message into the VCL event queue, to delegate the execution of a particular operation into the "main" thread,
  • use the "global" mutex to do some initialization,
  • use the Solar Mutex to protect a particular object,
  • rely on VCL:Win32 to enter the getMessage loop in the main thread (DDE).

Solution

Actually grep for thread related Uno code and change it, if needed. Change the environments of all possible components to "c++:unsafe".

Threads

  • vos timer thread
  • dtrans threads (clipboard and D&D)
  • ucbhelper: background download thread
  • ICE thread
  • configuration flash thread
  • Win32: affinity thread
  • office acceptor thread - second process thread
  • Uno acceptor thread
  • io - pump thread
  • package manager deployment GUI thread
  • Uno job threads
  • Printer discovery

Components

Libraries

Applications

Tasks

Title State
Declare be thread-unsafe module framework/desktop UTF2
Declare be thread-unsafe module framework/sfx2 UTF2
Declare be thread-unsafe module framework/filter UTF2
Declare be thread-unsafe module graphics/goodies UTF2
Declare be thread-unsafe module graphics/svx UTF2
Declare be thread-unsafe module gsl/toolkit UTF2
Declare be thread-unsafe module l10n/i18npool UTF2
Declare be thread-unsafe module sw/linguistic UTF2
Declare be thread-unsafe module sw/sw UTF2
Declare be thread-unsafe module ucb/uui UTF2
Declare be thread-unsafe module util/comphelper UTF2
Declare be thread-unsafe module util/xmlhelp UTF2
Declare be thread-unsafe module util/unotools UTF2
Declare be thread-unsafe module util/svtools UTF2
Declare be thread-unsafe module util/extensions UTF2
Declare be thread-unsafe module util/fileaccess UTF2
Declare be thread-unsafe module xml/xmloff UTF2
Declare be thread-unsafe module xml/package UTF2
Declare be thread-unsafe module xml/sax UTF2
Declare be thread-unsafe module dba/connectivity UTF2
Make ZConnectionPool / OPoolTimer thread enter the default thread-unsafe environment before invalidating the pooled connections. UTF2
AsyncEventNotifier / EventNotifierImpl - Already call "getComponent" at the "IEventProcessor" during construction of the "AsyncEventNotifier" and remember the object in a "free" reference utf2
Effort/Make VCL Thread-Transparent in progress

Dependencies

Area Title State CWS
C++ Uno Extended Binary Uno Threading-Model ready for QA bunoexttm
VCL Thread-Transparent VCL in progress vclthreadtransparency1
vclthreadtransparency2
Personal tools