commit mozilla-nspr for openSUSE:Factory
Hello community,
here is the log from the commit of package mozilla-nspr for openSUSE:Factory checked in at 2017-01-29 10:29:31
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/mozilla-nspr (Old)
and /work/SRC/openSUSE:Factory/.mozilla-nspr.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "mozilla-nspr"
Changes:
--------
--- /work/SRC/openSUSE:Factory/mozilla-nspr/mozilla-nspr.changes 2016-11-20 18:16:53.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.mozilla-nspr.new/mozilla-nspr.changes 2017-02-03 17:50:44.610059893 +0100
@@ -1,0 +2,22 @@
+Wed Jan 18 21:11:42 UTC 2017 - wr@rosenauer.org
+
+- update to version 4.13.1
+ * The previously released version 4.13 had changed pipes to be
+ nonblocking by default, and as a consequence, PollEvent was changed
+ to not block on clear.
+ The NSPR development team received reports that these changes
+ caused regressions in some applications that use NSPR, and it
+ has been decided to revert the changes made in NSPR 4.13.
+ NSPR 4.13.1 restores the traditional behavior of pipes and PollEvent.
+- update to version 4.13
+ NSPR 4.13 has the following bug fixes:
+ * PL_strcmp (and others) were fixed to return consistent results
+ when one of the arguments is NULL.
+ * PollEvent was fixed to not block on clear.
+ * Pipes are always nonblocking.
+ * PR_GetNameForIdentity: added thread safety lock and bound checks.
+ * Removed the PLArena freelist.
+ * Avoid some integer overflows.
+ * fixed several comments.
+
+-------------------------------------------------------------------
Old:
----
nspr-4.12.tar.gz
New:
----
nspr-4.13.1.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ mozilla-nspr.spec ++++++
--- /var/tmp/diff_new_pack.o9oI5F/_old 2017-02-03 17:50:45.137985462 +0100
+++ /var/tmp/diff_new_pack.o9oI5F/_new 2017-02-03 17:50:45.141984897 +0100
@@ -1,8 +1,8 @@
#
# spec file for package mozilla-nspr
#
-# Copyright (c) 2016 SUSE LINUX GmbH, Nuernberg, Germany.
-# 2006-2016 Wolfgang Rosenauer
+# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany.
+# 2006-2017 Wolfgang Rosenauer
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -18,7 +18,7 @@
Name: mozilla-nspr
-Version: 4.12
+Version: 4.13.1
Release: 0
Summary: Netscape Portable Runtime
License: MPL-2.0
++++++ nspr-4.12.tar.gz -> nspr-4.13.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nspr-4.12/nspr/.hg_archival.txt new/nspr-4.13.1/nspr/.hg_archival.txt
--- old/nspr-4.12/nspr/.hg_archival.txt 2016-02-12 14:51:25.000000000 +0100
+++ new/nspr-4.13.1/nspr/.hg_archival.txt 2016-10-20 14:50:51.000000000 +0200
@@ -1,4 +1,4 @@
repo: a4b34919bf34db2ee22acbbc305693c8980b6dc6
-node: 88265db540d75d59e12ea8dbc34031160fce9ccc
-branch: default
-tag: NSPR_4_12_RTM
+node: 624c3bc4ed4c33a235e46a4fc46cbcd092d6c952
+branch: NSS_4_13_BRANCH
+tag: NSPR_4_13_1_RTM
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nspr-4.12/nspr/automation/release/nspr-release-helper.py new/nspr-4.13.1/nspr/automation/release/nspr-release-helper.py
--- old/nspr-4.12/nspr/automation/release/nspr-release-helper.py 1970-01-01 01:00:00.000000000 +0100
+++ new/nspr-4.13.1/nspr/automation/release/nspr-release-helper.py 2016-10-20 14:50:51.000000000 +0200
@@ -0,0 +1,179 @@
+#!/usr/bin/python
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+
+import os
+import sys
+import datetime
+import shutil
+import glob
+from optparse import OptionParser
+from subprocess import check_call
+
+prinit_h = "pr/include/prinit.h"
+f_conf = "configure"
+f_conf_in = "configure.in"
+
+def check_call_noisy(cmd, *args, **kwargs):
+ print "Executing command:", cmd
+ check_call(cmd, *args, **kwargs)
+
+o = OptionParser(usage="client.py [options] remove_beta | set_beta | print_library_versions | set_version_to_minor_release | set_version_to_patch_release | create_nspr_release_archive")
+
+try:
+ options, args = o.parse_args()
+ action = args[0]
+except IndexError:
+ o.print_help()
+ sys.exit(2)
+
+def exit_with_failure(what):
+ print "failure: ", what
+ sys.exit(2)
+
+def check_files_exist():
+ if (not os.path.exists(prinit_h)):
+ exit_with_failure("cannot find expected header files, must run from inside NSPR hg directory")
+
+def sed_inplace(sed_expression, filename):
+ backup_file = filename + '.tmp'
+ check_call_noisy(["sed", "-i.tmp", sed_expression, filename])
+ os.remove(backup_file)
+
+def toggle_beta_status(is_beta):
+ check_files_exist()
+ if (is_beta):
+ print "adding Beta status to version numbers"
+ sed_inplace('s/^\(#define *PR_VERSION *\"[0-9.]\+\)\" *$/\\1 Beta\"/', prinit_h)
+ sed_inplace('s/^\(#define *PR_BETA *\)PR_FALSE *$/\\1PR_TRUE/', prinit_h)
+
+ else:
+ print "removing Beta status from version numbers"
+ sed_inplace('s/^\(#define *PR_VERSION *\"[0-9.]\+\) *Beta\" *$/\\1\"/', prinit_h)
+ sed_inplace('s/^\(#define *PR_BETA *\)PR_TRUE *$/\\1PR_FALSE/', prinit_h)
+ print "please run 'hg stat' and 'hg diff' to verify the files have been verified correctly"
+
+def print_beta_versions():
+ check_call_noisy(["egrep", "#define *PR_VERSION|#define *PR_BETA", prinit_h])
+
+def remove_beta_status():
+ print "--- removing beta flags. Existing versions were:"
+ print_beta_versions()
+ toggle_beta_status(False)
+ print "--- finished modifications, new versions are:"
+ print_beta_versions()
+
+def set_beta_status():
+ print "--- adding beta flags. Existing versions were:"
+ print_beta_versions()
+ toggle_beta_status(True)
+ print "--- finished modifications, new versions are:"
+ print_beta_versions()
+
+def print_library_versions():
+ check_files_exist()
+ check_call_noisy(["egrep", "#define *PR_VERSION|#define PR_VMAJOR|#define *PR_VMINOR|#define *PR_VPATCH|#define *PR_BETA", prinit_h])
+
+def ensure_arguments_after_action(how_many, usage):
+ if (len(sys.argv) != (2+how_many)):
+ exit_with_failure("incorrect number of arguments, expected parameters are:\n" + usage)
+
+def set_major_versions(major):
+ sed_inplace('s/^\(#define *PR_VMAJOR *\).*$/\\1' + major + '/', prinit_h)
+ sed_inplace('s/^MOD_MAJOR_VERSION=.*$/MOD_MAJOR_VERSION=' + major + '/', f_conf)
+ sed_inplace('s/^MOD_MAJOR_VERSION=.*$/MOD_MAJOR_VERSION=' + major + '/', f_conf_in)
+
+def set_minor_versions(minor):
+ sed_inplace('s/^\(#define *PR_VMINOR *\).*$/\\1' + minor + '/', prinit_h)
+ sed_inplace('s/^MOD_MINOR_VERSION=.*$/MOD_MINOR_VERSION=' + minor + '/', f_conf)
+ sed_inplace('s/^MOD_MINOR_VERSION=.*$/MOD_MINOR_VERSION=' + minor + '/', f_conf_in)
+
+def set_patch_versions(patch):
+ sed_inplace('s/^\(#define *PR_VPATCH *\).*$/\\1' + patch + '/', prinit_h)
+ sed_inplace('s/^MOD_PATCH_VERSION=.*$/MOD_PATCH_VERSION=' + patch + '/', f_conf)
+ sed_inplace('s/^MOD_PATCH_VERSION=.*$/MOD_PATCH_VERSION=' + patch + '/', f_conf_in)
+
+def set_full_lib_versions(version):
+ sed_inplace('s/^\(#define *PR_VERSION *\"\)\([0-9.]\+\)\(.*\)$/\\1' + version + '\\3/', prinit_h)
+
+def set_all_lib_versions(version, major, minor, patch):
+ set_full_lib_versions(version)
+ set_major_versions(major)
+ set_minor_versions(minor)
+ set_patch_versions(patch)
+ print
+ print "==========================="
+ print "======== ATTENTION ========"
+ print
+ print "You *MUST* manually edit file pr/tests/vercheck.c"
+ print
+ print "Edit two arrays, named compatible_version and incompatible_version"
+ print "according to the new version you're adding."
+ print
+ print "======== ATTENTION ========"
+ print "==========================="
+
+def set_version_to_minor_release():
+ ensure_arguments_after_action(2, "major_version minor_version")
+ major = args[1].strip()
+ minor = args[2].strip()
+ version = major + '.' + minor
+ patch = "0"
+ set_all_lib_versions(version, major, minor, patch)
+
+def set_version_to_patch_release():
+ ensure_arguments_after_action(3, "major_version minor_version patch_release")
+ major = args[1].strip()
+ minor = args[2].strip()
+ patch = args[3].strip()
+ version = major + '.' + minor + '.' + patch
+ set_all_lib_versions(version, major, minor, patch)
+
+def create_nspr_release_archive():
+ ensure_arguments_after_action(2, "nspr_release_version nspr_hg_release_tag")
+ nsprrel = args[1].strip() #e.g. 4.10.9
+ nsprreltag = args[2].strip() #e.g. NSPR_4_10_9_RTM
+
+ nspr_tar = "nspr-" + nsprrel + ".tar.gz"
+ nspr_stagedir="../stage/v" + nsprrel + "/src"
+ if (os.path.exists(nspr_stagedir)):
+ exit_with_failure("nspr stage directory already exists: " + nspr_stagedir)
+
+ check_call_noisy(["mkdir", "-p", nspr_stagedir])
+ check_call_noisy(["hg", "archive", "-r", nsprreltag, "--prefix=nspr-" + nsprrel + "/nspr",
+ "../stage/v" + nsprrel + "/src/" + nspr_tar, "-X", ".hgtags"])
+ print "changing to directory " + nspr_stagedir
+ os.chdir(nspr_stagedir)
+
+ check_call("sha1sum " + nspr_tar + " > SHA1SUMS", shell=True)
+ check_call("sha256sum " + nspr_tar + " > SHA256SUMS", shell=True)
+ print "created directory " + nspr_stagedir + " with files:"
+ check_call_noisy(["ls", "-l"])
+
+if action in ('remove_beta'):
+ remove_beta_status()
+
+elif action in ('set_beta'):
+ set_beta_status()
+
+elif action in ('print_library_versions'):
+ print_library_versions()
+
+# x.y version number - 2 parameters
+elif action in ('set_version_to_minor_release'):
+ set_version_to_minor_release()
+
+# x.y.z version number - 3 parameters
+elif action in ('set_version_to_patch_release'):
+ set_version_to_patch_release()
+
+elif action in ('create_nspr_release_archive'):
+ create_nspr_release_archive()
+
+else:
+ o.print_help()
+ sys.exit(2)
+
+sys.exit(0)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nspr-4.12/nspr/configure new/nspr-4.13.1/nspr/configure
--- old/nspr-4.12/nspr/configure 2016-02-12 14:51:25.000000000 +0100
+++ new/nspr-4.13.1/nspr/configure 2016-10-20 14:50:51.000000000 +0200
@@ -2488,8 +2488,8 @@
program_prefix=${target_alias}-
MOD_MAJOR_VERSION=4
-MOD_MINOR_VERSION=12
-MOD_PATCH_VERSION=0
+MOD_MINOR_VERSION=13
+MOD_PATCH_VERSION=1
NSPR_MODNAME=nspr20
_HAVE_PTHREADS=
USE_PTHREADS=
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nspr-4.12/nspr/configure.in new/nspr-4.13.1/nspr/configure.in
--- old/nspr-4.12/nspr/configure.in 2016-02-12 14:51:25.000000000 +0100
+++ new/nspr-4.13.1/nspr/configure.in 2016-10-20 14:50:51.000000000 +0200
@@ -15,8 +15,8 @@
dnl = Defaults
dnl ========================================================
MOD_MAJOR_VERSION=4
-MOD_MINOR_VERSION=12
-MOD_PATCH_VERSION=0
+MOD_MINOR_VERSION=13
+MOD_PATCH_VERSION=1
NSPR_MODNAME=nspr20
_HAVE_PTHREADS=
USE_PTHREADS=
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nspr-4.12/nspr/lib/ds/plarena.c new/nspr-4.13.1/nspr/lib/ds/plarena.c
--- old/nspr-4.12/nspr/lib/ds/plarena.c 2016-02-12 14:51:25.000000000 +0100
+++ new/nspr-4.13.1/nspr/lib/ds/plarena.c 2016-10-20 14:50:51.000000000 +0200
@@ -17,8 +17,6 @@
#include "prlock.h"
#include "prinit.h"
-static PLArena *arena_freelist;
-
#ifdef PL_ARENAMETER
static PLArenaStats *arena_stats_list;
@@ -29,49 +27,6 @@
#define PL_ARENA_DEFAULT_ALIGN sizeof(double)
-static PRLock *arenaLock;
-static PRCallOnceType once;
-static const PRCallOnceType pristineCallOnce;
-
-/*
-** InitializeArenas() -- Initialize arena operations.
-**
-** InitializeArenas() is called exactly once and only once from
-** LockArena(). This function creates the arena protection
-** lock: arenaLock.
-**
-** Note: If the arenaLock cannot be created, InitializeArenas()
-** fails quietly, returning only PR_FAILURE. This percolates up
-** to the application using the Arena API. He gets no arena
-** from PL_ArenaAllocate(). It's up to him to fail gracefully
-** or recover.
-**
-*/
-static PRStatus InitializeArenas( void )
-{
- PR_ASSERT( arenaLock == NULL );
- arenaLock = PR_NewLock();
- if ( arenaLock == NULL )
- return PR_FAILURE;
- else
- return PR_SUCCESS;
-} /* end ArenaInitialize() */
-
-static PRStatus LockArena( void )
-{
- PRStatus rc = PR_CallOnce( &once, InitializeArenas );
-
- if ( PR_FAILURE != rc )
- PR_Lock( arenaLock );
- return(rc);
-} /* end LockArena() */
-
-static void UnlockArena( void )
-{
- PR_Unlock( arenaLock );
- return;
-} /* end UnlockArena() */
-
PR_IMPLEMENT(void) PL_InitArenaPool(
PLArenaPool *pool, const char *name, PRUint32 size, PRUint32 align)
{
@@ -124,14 +79,7 @@
** pool.
**
** First, try to satisfy the request from arenas starting at
-** pool->current.
-**
-** If there is not enough space in the arena pool->current, try
-** to claim an arena, on a first fit basis, from the global
-** freelist (arena_freelist).
-**
-** If no arena in arena_freelist is suitable, then try to
-** allocate a new arena from the heap.
+** pool->current. Then try to allocate a new arena from the heap.
**
** Returns: pointer to allocated space or NULL
**
@@ -169,37 +117,6 @@
} while( NULL != (a = a->next) );
}
- /* attempt to allocate from arena_freelist */
- {
- PLArena *p; /* previous pointer, for unlinking from freelist */
-
- /* lock the arena_freelist. Make access to the freelist MT-Safe */
- if ( PR_FAILURE == LockArena())
- return(0);
-
- for ( a = arena_freelist, p = NULL; a != NULL ; p = a, a = a->next ) {
- if ( nb <= a->limit - a->base ) {
- if ( p == NULL )
- arena_freelist = a->next;
- else
- p->next = a->next;
- UnlockArena();
- a->avail = a->base;
- rp = (char *)a->avail;
- a->avail += nb;
- /* the newly allocated arena is linked after pool->current
- * and becomes pool->current */
- a->next = pool->current->next;
- pool->current->next = a;
- pool->current = a;
- if ( NULL == pool->first.next )
- pool->first.next = a;
- return(rp);
- }
- }
- UnlockArena();
- }
-
/* attempt to allocate from the heap */
{
PRUint32 sz = PR_MAX(pool->arenasize, nb);
@@ -246,10 +163,11 @@
return newp;
}
-static void ClearArenaList(PLArena *a, PRInt32 pattern)
+PR_IMPLEMENT(void) PL_ClearArenaPool(PLArenaPool *pool, PRInt32 pattern)
{
+ PLArena *a;
- for (; a; a = a->next) {
+ for (a = pool->first.next; a; a = a->next) {
PR_ASSERT(a->base <= a->avail && a->avail <= a->limit);
a->avail = a->base;
PL_CLEAR_UNUSED_PATTERN(a, pattern);
@@ -257,48 +175,25 @@
}
}
-PR_IMPLEMENT(void) PL_ClearArenaPool(PLArenaPool *pool, PRInt32 pattern)
-{
- ClearArenaList(pool->first.next, pattern);
-}
-
/*
* Free tail arenas linked after head, which may not be the true list head.
* Reset pool->current to point to head in case it pointed at a tail arena.
*/
-static void FreeArenaList(PLArenaPool *pool, PLArena *head, PRBool reallyFree)
+static void FreeArenaList(PLArenaPool *pool, PLArena *head)
{
- PLArena **ap, *a;
-
- ap = &head->next;
- a = *ap;
+ PLArena *a = head->next;
if (!a)
return;
-#ifdef DEBUG
- ClearArenaList(a, PL_FREE_PATTERN);
-#endif
+ head->next = NULL;
- if (reallyFree) {
- do {
- *ap = a->next;
- PL_CLEAR_ARENA(a);
- PL_COUNT_ARENA(pool,--);
- PR_DELETE(a);
- } while ((a = *ap) != 0);
- } else {
- /* Insert the whole arena chain at the front of the freelist. */
- do {
- PL_MAKE_MEM_NOACCESS((void*)(*ap)->base,
- (*ap)->limit - (*ap)->base);
- ap = &(*ap)->next;
- } while (*ap);
- LockArena();
- *ap = arena_freelist;
- arena_freelist = a;
- head->next = 0;
- UnlockArena();
- }
+ do {
+ PLArena *tmp = a;
+ a = a->next;
+ PL_CLEAR_ARENA(tmp);
+ PL_COUNT_ARENA(pool,--);
+ PR_DELETE(tmp);
+ } while (a);
pool->current = head;
}
@@ -310,7 +205,7 @@
for (a = &pool->first; a; a = a->next) {
if (PR_UPTRDIFF(mark, a->base) <= PR_UPTRDIFF(a->avail, a->base)) {
a->avail = (PRUword)PL_ARENA_ALIGN(pool, mark);
- FreeArenaList(pool, a, PR_FALSE);
+ FreeArenaList(pool, a);
return;
}
}
@@ -318,13 +213,13 @@
PR_IMPLEMENT(void) PL_FreeArenaPool(PLArenaPool *pool)
{
- FreeArenaList(pool, &pool->first, PR_FALSE);
+ FreeArenaList(pool, &pool->first);
COUNT(pool, ndeallocs);
}
PR_IMPLEMENT(void) PL_FinishArenaPool(PLArenaPool *pool)
{
- FreeArenaList(pool, &pool->first, PR_TRUE);
+ FreeArenaList(pool, &pool->first);
#ifdef PL_ARENAMETER
{
PLArenaStats *stats, **statsp;
@@ -348,19 +243,6 @@
PR_IMPLEMENT(void) PL_ArenaFinish(void)
{
- PLArena *a, *next;
-
- for (a = arena_freelist; a; a = next) {
- next = a->next;
- PR_DELETE(a);
- }
- arena_freelist = NULL;
-
- if (arenaLock) {
- PR_DestroyLock(arenaLock);
- arenaLock = NULL;
- }
- once = pristineCallOnce;
}
PR_IMPLEMENT(size_t) PL_SizeOfArenaPoolExcludingPool(
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nspr-4.12/nspr/lib/ds/plarena.h new/nspr-4.13.1/nspr/lib/ds/plarena.h
--- old/nspr-4.12/nspr/lib/ds/plarena.h 2016-02-12 14:51:25.000000000 +0100
+++ new/nspr-4.13.1/nspr/lib/ds/plarena.h 2016-10-20 14:50:51.000000000 +0200
@@ -13,7 +13,6 @@
* Also supports LIFO allocation (PL_ARENA_MARK/PL_ARENA_RELEASE).
*/
#include "prtypes.h"
-#include "plarenas.h"
PR_BEGIN_EXTERN_C
@@ -47,6 +46,8 @@
};
#endif
+typedef struct PLArenaPool PLArenaPool;
+
struct PLArenaPool {
PLArena first; /* first arena in pool list */
PLArena *current; /* arena from which to allocate space */
@@ -225,6 +226,74 @@
(a) = 0; \
PR_END_MACRO
+/*
+** Initialize an arena pool with the given name for debugging and metering,
+** with a minimum gross size per arena of size bytes. The net size per arena
+** is smaller than the gross size by a header of four pointers plus any
+** necessary padding for alignment.
+**
+** Note: choose a gross size that's a power of two to avoid the heap allocator
+** rounding the size up.
+**/
+PR_EXTERN(void) PL_InitArenaPool(
+ PLArenaPool *pool, const char *name, PRUint32 size, PRUint32 align);
+
+/*
+** Finish using arenas, freeing all memory associated with them.
+** NOTE: this function is now a no-op. If you want to free a single
+** PLArenaPoolUse use PL_FreeArenaPool() or PL_FinishArenaPool().
+**/
+PR_EXTERN(void) PL_ArenaFinish(void);
+
+/*
+** Free the arenas in pool. The user may continue to allocate from pool
+** after calling this function. There is no need to call PL_InitArenaPool()
+** again unless PL_FinishArenaPool(pool) has been called.
+**/
+PR_EXTERN(void) PL_FreeArenaPool(PLArenaPool *pool);
+
+/*
+** Free the arenas in pool and finish using it altogether.
+**/
+PR_EXTERN(void) PL_FinishArenaPool(PLArenaPool *pool);
+
+/*
+** Compact all of the arenas in a pool so that no space is wasted.
+** NOT IMPLEMENTED. Do not use.
+**/
+PR_EXTERN(void) PL_CompactArenaPool(PLArenaPool *pool);
+
+/*
+** Friend functions used by the PL_ARENA_*() macros.
+**
+** WARNING: do not call these functions directly. Always use the
+** PL_ARENA_*() macros.
+**/
+PR_EXTERN(void *) PL_ArenaAllocate(PLArenaPool *pool, PRUint32 nb);
+
+PR_EXTERN(void *) PL_ArenaGrow(
+ PLArenaPool *pool, void *p, PRUint32 size, PRUint32 incr);
+
+PR_EXTERN(void) PL_ArenaRelease(PLArenaPool *pool, char *mark);
+
+/*
+** memset contents of all arenas in pool to pattern
+*/
+PR_EXTERN(void) PL_ClearArenaPool(PLArenaPool *pool, PRInt32 pattern);
+
+/*
+** A function like malloc_size() or malloc_usable_size() that measures the
+** size of a heap block.
+*/
+typedef size_t (*PLMallocSizeFn)(const void *ptr);
+
+/*
+** Measure all memory used by a PLArenaPool, excluding the PLArenaPool
+** structure.
+*/
+PR_EXTERN(size_t) PL_SizeOfArenaPoolExcludingPool(
+ const PLArenaPool *pool, PLMallocSizeFn mallocSizeOf);
+
#ifdef PL_ARENAMETER
#include
participants (1)
-
root@hilbertn.suse.de