Граф коммитов

52 Коммитов

Автор SHA1 Сообщение Дата
Nathan Froyd 8bb05ee37e Bug 1202497 - follow-up - fix static analysis bustage; r=me 2015-09-22 19:25:37 -04:00
Nathan Froyd 3eae8069d0 Bug 1202497 - part 7 - make nsEventQueue use external locking; r=gerald
We want to ensure that nsThread's use of nsEventQueue uses locking done
in nsThread instead of nsEventQueue, for efficiency's sake: we only need
to lock once in nsThread, rather than the current situation of locking
in nsThread and additionally in nsEventQueue.  With the current
structure of nsEventQueue, that would mean that nsThread should be using
a Monitor internally, rather than a Mutex.

Which would be well and good, except that DOM workers use nsThread's
mutex to protect their own, internal CondVar.  Switching nsThread to use
a Monitor would mean that either:

- DOM workers drop their internal CondVar in favor of nsThread's
  Monitor-owned CondVar.  This change seems unlikely to work out well,
  because now the Monitor-owned CondVar is performing double duty:
  tracking availability of events in nsThread's event queue and
  additionally whatever DOM workers were using a CondVar for.  Having a
  single CondVar track two things in such a fashion is for Experts Only.

- DOM workers grow their own Mutex to protect their own CondVar.  Adding
  a mutex like this would change locking in subtle ways and seems
  unlikely to lead to success.

Using a Monitor in nsThread is therefore untenable, and we would like to
retain the current Mutex that lives in nsThread.  Therefore, we need to
have nsEventQueue manage its own condition variable and push the
required (Mutex) locking to the client of nsEventQueue.  This scheme
also seems more fitting: external clients merely need synchronized
access to the event queue; the details of managing notifications about
events in the event queue should be left up to the event queue itself.

Doing so also forces us to merge nsEventQueueBase and nsEventQueue:
there's no way to have nsEventQueueBase require an externally-defined
Mutex and then have nsEventQueue subclass nsEventQueueBase and provide
its own Mutex to the superclass.  C++ initialization rules (and the way
things like CondVar are constructed) simply forbid it.  But that's OK,
because we want a world where nsEventQueue is externally locked anyway,
so there's no reason to have separate classes here.

One casualty of this work is removing ChaosMode support from
nsEventQueue.  nsEventQueue had support to delay placing events into the
queue, theoretically giving other threads the chance to put events there
first.  Unfortunately, since the thread would have been holding a lock
(as is evident from the MutexAutoLock& parameter required), sleeping in
PutEvent accomplishes nothing but delaying the thread from getting
useful work done.  We should support this, but it's complicated to
figure out how to reasonably support this right now.

A wrinkle in this overall pleasant refactoring is that nsThreadPool's
threads wait for limited amounts of time for new events to be placed in
the event queue, so that they can shut themselves down if no new events
are appearing.  Setting limits on the number of threads also needs to be
able to wake up all threads, so threads can shut themselves down if
necessary.

Unfortunately, with the transition to nsEventQueue managing its own
condition variable, there's no way for nsThreadPool to perform these
functions, since there's no Monitor to wait on.  Therefore, we add a
private API for accessing the condition variable and performing the
tasks nsThreadPool needs.

Prior to all the previous patches, placing items in an nsThread's event
queue required three lock/unlock pairs: one for nsThread's Mutex, one to
enter nsEventQueue's ReentrantMonitor, and one to exit nsEventQueue's
ReentrantMonitor.  The upshot of all this work is that we now only
require one lock/unlock pair in nsThread itself, as things should be.
2015-09-20 05:13:09 -04:00
Nathan Froyd c6238d0d96 Bug 1202497 - part 6 - make the locking requirements of nsEventQueue explicit; r=gerald
Like the previous patch, this patch is a no-op change in terms of
functionality.  It does, however, pave part of the way for forcing
clients of nsEventQueue to provide their own locking.
2015-09-21 04:34:51 -04:00
Nathan Froyd 556c7604e5 Bug 1202497 - part 2 - remove ReentrantMonitor specializations for nsEventQueueBase; r=gerald
Now that nsEventQueue no longer depends on ReentrantMonitors, we can get
rid of these unused specializations.
2015-09-20 04:17:05 -04:00
Nathan Froyd 5593d06e9c Bug 1202497 - part 1 - switch nsEventQueue to use a non-reentrant Monitor; r=gerald
nsEventQueue's monitor does not require re-entrancy now that the monitor
is not externally visible.  Since ReentrantMonitors require two separate
mutex lock/unlock pairs (one on entry, and one on exit), this cuts the
amount of locking nsEventQueue's methods do by half.
2015-09-14 21:52:08 -04:00
Nathan Froyd 8502eaeea7 Bug 1195767 - part 4 - remove nsEventQueue::GetReentrantMonitor; r=gerald
The last commit eliminated the only client of this method, so we can
remove it now.
2015-09-03 16:37:51 -04:00
Nathan Froyd 92e6eccda2 Bug 1195767 - part 2 - create an nsEventQueueBase templated over the monitor type; r=gerald
Clients of nsEventQueue don't always need fully reentrant monitors.
Let's account for that by having a base class templated on the monitor
type.  This change also opens up the possibility of having the monitor
for the event queue not owned by the event queue itself, but by the
client class, which makes a lot more sense than the current design.
2015-08-28 13:26:17 -04:00
Randell Jesup c87c478f4f Bug 1155059: Patch 1&2 - Convert Dispatch() and friends to already_AddRefed<> r=froydnj
Modify Dispatch IDL and code to deal with MSVC issues with overloaded templates r=froydnj
2015-07-09 23:21:46 -04:00
JW Wang 40a8b752c7 Bug 1161405. Part 1 - improve parallelism of nsThreadPool by taking the number of pending events into account when spawning a new thread. r=nfroyd. 2015-05-09 07:32:30 +08:00
Birunthan Mohanathas c9fb2c0d48 Bug 1022456 - Fix modelines in xpcom/{base,glue,io,string,threads}/. r=froydnj 2014-06-30 08:39:45 -07:00
Birunthan Mohanathas 67dad11bae Bug 995730 - Convert xpcom/threads/ to Gecko style. r=froydnj
--HG--
extra : rebase_source : 1f6f179f44db87f55ebfe5d855192adfad7d1b74
2014-05-27 10:15:35 +03:00
Kyle Huey 7af104c03a Bug 996132: Make allocations in the event queue infallible. r=bsmedberg 2014-05-23 12:53:14 -07:00
Chris Peterson 39725a5322 Bug 905221 - sizeof(nsEventQueue::Page) should be a power of two to avoid heap allocation slop. r=bsmedberg 2013-09-02 19:30:19 -07:00
Ehsan Akhgari e368dc9c85 Bug 579517 - Part 1: Automated conversion of NSPR numeric types to stdint types in Gecko; r=bsmedberg
This patch was generated by a script.  Here's the source of the script for
future reference:

function convert() {
echo "Converting $1 to $2..."
find . ! -wholename "*nsprpub*" \
       ! -wholename "*security/nss*" \
       ! -wholename "*/.hg*" \
       ! -wholename "obj-ff-dbg*" \
       ! -name nsXPCOMCID.h \
       ! -name prtypes.h \
         -type f \
      \( -iname "*.cpp" \
         -o -iname "*.h" \
         -o -iname "*.c" \
         -o -iname "*.cc" \
         -o -iname "*.idl" \
         -o -iname "*.ipdl" \
         -o -iname "*.ipdlh" \
         -o -iname "*.mm" \) | \
    xargs -n 1 sed -i -e "s/\b$1\b/$2/g"
}

convert PRInt8 int8_t
convert PRUint8 uint8_t
convert PRInt16 int16_t
convert PRUint16 uint16_t
convert PRInt32 int32_t
convert PRUint32 uint32_t
convert PRInt64 int64_t
convert PRUint64 uint64_t

convert PRIntn int
convert PRUintn unsigned

convert PRSize size_t

convert PROffset32 int32_t
convert PROffset64 int64_t

convert PRPtrdiff ptrdiff_t

convert PRFloat64 double
2012-08-22 11:56:38 -04:00
Aryeh Gregor d0ad5a7d0c Bug 777292 part 2 - Change all nsnull to nullptr 2012-07-30 17:20:58 +03:00
Gervase Markham 82ff7027aa Bug 716478 - update licence to MPL 2. 2012-05-21 12:12:37 +01:00
Ehsan Akhgari 92064e6d3f Bug 690892 - Replace PR_TRUE/PR_FALSE with true/false on mozilla-central; rs=dbaron
Landing on a CLOSED TREE
2011-10-17 10:59:28 -04:00
Michael Wu d2b70213ac Bug 675553 - Switch from PRBool to bool on a CLOSED TREE , r=bsmedberg,khuey,bz,cjones
--HG--
rename : tools/trace-malloc/bloatblame.c => tools/trace-malloc/bloatblame.cpp
2011-09-28 23:19:26 -07:00
Matheus Kerschbaum 8a4cb927fd Bug 678155 - Remove NS_COM. r=bsmedberg 2011-08-18 15:46:39 +02:00
Chris Jones 31aa2c4e77 Bug 556214, parts 1 and 1.1: Rename Monitor to ReentrantMonitor and fix existing Monitor users. r=roc
--HG--
rename : xpcom/glue/Monitor.h => xpcom/glue/ReentrantMonitor.h
2011-04-29 14:21:57 -05:00
Serge Gautherie 031f194849 Bug 508760 - Remove MSVC6 support from the tree; (Jv1) nsEventQueue.h.
r=benjamin.
2011-04-14 12:47:41 +02:00
Chris Jones ext:(%20and%20Kyle%20Huey%20%3Ckhuey%40kylehuey.com%3E) 2c92e3ecd5 Rollup of bug 645263 and bug 646259: Switch to mozilla:: sync primitives. r=cjones,dbaron,doublec,ehsan src=bsmedberg
Bug 645263, part 0: Count sync primitive ctor/dtors. r=dbaron
Bug 645263, part 1: Migrate content/media to mozilla:: sync primitives. r=doublec
Bug 645263, part 2: Migrate modules/plugin to mozilla:: sync primitives. sr=bsmedberg
Bug 645263, part 3: Migrate nsComponentManagerImpl to mozilla:: sync primitives. sr=bsmedberg
Bug 645263, part 4: Migrate everything else to mozilla:: sync primitives. r=dbaron
Bug 645263, part 5: Remove nsAutoLock.*. sr=bsmedberg
Bug 645263, part 6: Make editor test be nicer to deadlock detector. r=ehsan
Bug 645263, part 7: Disable tracemalloc backtraces for xpcshell tests. r=dbaron
Bug 646259: Fix nsCacheService to use a CondVar for notifying. r=cjones
2011-03-31 23:29:02 -05:00
Chris Jones 699024f868 Backed out changeset 4beec31b9ea9 for increasing frequency of intermittent orange bug 618052 2011-03-31 18:57:38 -05:00
Chris Jones ext:(%20and%20Kyle%20Huey%20%3Ckhuey%40kylehuey.com%3E) 0ce53bb598 Rollup of bug 645263 and bug 646259: Switch to mozilla:: sync primitives. r=cjones,dbaron,doublec,ehsan src=bsmedberg
Bug 645263, part 0: Count sync primitive ctor/dtors. r=dbaron
Bug 645263, part 1: Migrate content/media to mozilla:: sync primitives. r=doublec
Bug 645263, part 2: Migrate modules/plugin to mozilla:: sync primitives. sr=bsmedberg
Bug 645263, part 3: Migrate nsComponentManagerImpl to mozilla:: sync primitives. sr=bsmedberg
Bug 645263, part 4: Migrate everything else to mozilla:: sync primitives. r=dbaron
Bug 645263, part 5: Remove nsAutoLock.*. sr=bsmedberg
Bug 645263, part 6: Make editor test be nicer to deadlock detector. r=ehsan
Bug 645263, part 7: Disable tracemalloc backtraces for xpcshell tests. r=dbaron
Bug 646259: Fix nsCacheService to use a CondVar for notifying. r=cjones
2011-03-31 14:51:19 -05:00
jwalden@mit.edu 6d7584839a Bug 348748 - Replace all instances of NS_STATIC_CAST and friends with C++ casts (and simultaneously bitrot nearly every patch in existence). r=bsmedberg on the script that did this. Tune in next time for Macro Wars: Episode II: Attack on the LL_* Macros. 2007-07-08 00:08:04 -07:00
darin%meer.net 7321e2791d fix vc6 bustage 2006-05-10 19:02:05 +00:00
darin%meer.net 0318b8c707 landing patch for bug 326273 "Implement nsIThreadManager" (Mac portions by Mark Mentovai) with reviews from bienvenu, bsmedberg, bzbarsky, josh, roc, and ssieb 2006-05-10 17:30:15 +00:00
bsmedberg%covad.net 3530da7ba8 Bug 319999 - XPCOM Shutdown: xpcom-shutdown-threads notification and cleanup of event queues before component manager shutdown, r=darin 2006-01-17 15:41:40 +00:00
bzbarsky%mit.edu c5cc24631e Fix revokeEvents to reliably revoke them. Bug 284389, r=darin, sr=dbaron,
a=asa
2005-04-15 03:17:13 +00:00
darin%meer.net c3a3b5f4fc fixes bug 273819 "ASSERTION: Native event queues should only be used on the main thread" r=danm, sr=bienvenu 2004-12-17 19:47:06 +00:00
gerv%gerv.net 31625ba2b1 Bug 236613: change to MPL/LGPL/GPL tri-license. 2004-04-18 14:21:17 +00:00
bryner%brianryner.com 0c7c3a2ff3 Bug 229875 - eliminate unnecssary public/virtual destructors. This patch changes all refcounted classes under xpcom/, which aren't inherited from or used on the stack, to have private, nonvirtual destructors. r=dougt, sr=dbaron. 2004-01-15 06:14:18 +00:00
darin%meer.net 77642ae698 fixes bug 210125 "need to be able to AsyncWait for closure only" r=dougt sr=bzbarsky 2003-10-06 01:46:31 +00:00
bryner%netscape.com 0108846dbf Fixing crash dismissing dialogs on linux (bug 134070). r=dougt, sr=darin, a=asa & adt. 2002-04-05 23:42:35 +00:00
gerv%gerv.net 4e12e44b2f Relicensing Round 1, Take 2. Most C-like NPL files -> NPL/GPL/LGPL. Bug 98089. 2001-09-28 20:14:13 +00:00
dmose%mozilla.org 0a3c12b78b Fix for bug 61692: IDLify nsIEventQueue and nsIEventQueueService. This makes it possible to create an nsISupports proxy for calling across threads in languages other than C++ (eg JS). r=dougt@netscape.com, r=jband@netscape.com, sr=brendan@mozilla.org 2000-12-08 04:30:36 +00:00
pavlov%netscape.com 6d72d15bf9 Fix for eventqueue objects leaking bug #20166. This also removes the hacked fix for bug #36361 and uses a real fix. Major overhaul of nsEventQueue and nsEventQueueService. r=waterson,brendan. tested on windows, linux and mac 2000-06-05 21:53:25 +00:00
danm%netscape.com 155b1b253e add API to EventQueueService for creating a monitored event queue. part of bug 25979. r=dougt r=jar 2000-03-04 03:17:01 +00:00
dougt%netscape.com 48219cc034 Fix for bug 26732. r=danm. event queue need to be able to init a plevent 2000-02-09 02:28:51 +00:00
dougt%netscape.com bfc6760bd6 Fix for bug 22933 submitted by jonas.utterstrom@vittran.norrnod.se. r=dougt. 2000-01-06 19:46:44 +00:00
valeski%netscape.com 2f303433fa 21723. a=chofmann, r=rpotts. Laying ground work for FTP checkin. This fixes an oppressive event queue api method. We weren't returning the event to be processed. subsequently the event was being lost. There are currently *no* users of this method in the tree. 1999-12-14 22:06:17 +00:00
dp%netscape.com aa23a77403 NS_GET_IID(). Thanks to patch from pp@ludasdesign.com r=dp@netscape.com 1999-12-01 00:21:53 +00:00
dougt%netscape.com 490e502cc6 fix for bug 18114. Adding simple accessor to PL_WaitForEvent. 1999-11-16 16:04:14 +00:00
dmose%mozilla.org 142ac52eaf updated xPL license boilerplate to v1.1, a=chofmann@netscape.com,r=endico@mozilla.org 1999-11-06 03:43:54 +00:00
danm%netscape.com 588868b60c event queues own and delete themselves when they're done. bug 15856 r:hyatt@netscape.com 1999-10-18 14:59:57 +00:00
dougt%netscape.com bbbf030084 Adding IsQueueOnCurrentThread(). 1999-06-14 20:20:33 +00:00
valeski%netscape.com d459a0bb4b added the HandleEvent method 1999-06-04 15:02:27 +00:00
dougt%netscape.com 1c4881668c Adding a few more functions to nsIEventQueue.
Moving proxy to use nsIEventQueue instead of PLEvents direct.
1999-05-29 22:50:25 +00:00
dp%netscape.com 94344009c8 Landing xpcom20/21 branch. 1999-05-26 01:38:36 +00:00
sspitzer%netscape.com 3c2da32000 destructor should be virtual. 1999-05-13 00:44:20 +00:00