Hello community, here is the log from the commit of package jemalloc for openSUSE:Factory checked in at 2013-06-06 14:58:24 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/jemalloc (Old) and /work/SRC/openSUSE:Factory/.jemalloc.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "jemalloc" Changes: -------- --- /work/SRC/openSUSE:Factory/jemalloc/jemalloc.changes 2013-03-08 09:13:35.000000000 +0100 +++ /work/SRC/openSUSE:Factory/.jemalloc.new/jemalloc.changes 2013-06-06 14:58:26.000000000 +0200 @@ -1,0 +2,12 @@ +Thu Jun 6 10:52:02 UTC 2013 - idon...@suse.com + +- Rename pprof to pprof-jemalloc to prevent conflict with gperftools + +------------------------------------------------------------------- +Wed Jun 5 14:49:45 UTC 2013 - idon...@suse.com + +- Update to version 3.4.0 + * Support for aarch64 + * Fix race-triggered deadlocks in chunk_record() + +------------------------------------------------------------------- Old: ---- jemalloc-3.3.1.tar.bz2 New: ---- jemalloc-3.4.0.tar.bz2 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ jemalloc.spec ++++++ --- /var/tmp/diff_new_pack.EYmNg4/_old 2013-06-06 14:58:27.000000000 +0200 +++ /var/tmp/diff_new_pack.EYmNg4/_new 2013-06-06 14:58:27.000000000 +0200 @@ -17,7 +17,7 @@ Name: jemalloc -Version: 3.3.1 +Version: 3.4.0 Release: 0 %define lname libjemalloc1 Summary: General-purpose scalable concurrent malloc implementation @@ -73,6 +73,7 @@ %install b=%{buildroot}; make install DESTDIR="$b"; + chmod -x "%{buildroot}/%{_libdir}"/*.a; if [ "%_docdir" != "%{_datadir}/doc" ]; then # stupid Makefile does not allow to set it @@ -80,13 +81,15 @@ mv "$b/%{_datadir}/doc/jemalloc" "$b/%_docdir/%{name}"; fi; +mv %{buildroot}/%{_bindir}/pprof %{buildroot}/%{_bindir}/pprof-jemalloc + %check make check %files %defattr(-,root,root) %{_bindir}/jemalloc.sh -%{_bindir}/pprof +%{_bindir}/pprof-jemalloc %{_mandir}/man*/* %_docdir/%{name} ++++++ jemalloc-3.3.1.tar.bz2 -> jemalloc-3.4.0.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/jemalloc-3.3.1/ChangeLog new/jemalloc-3.4.0/ChangeLog --- old/jemalloc-3.3.1/ChangeLog 2013-03-06 21:04:18.000000000 +0100 +++ new/jemalloc-3.4.0/ChangeLog 2013-06-03 06:06:22.000000000 +0200 @@ -6,6 +6,19 @@ http://www.canonware.com/cgi-bin/gitweb.cgi?p=jemalloc.git git://canonware.com/jemalloc.git +* 3.4.0 (June 2, 2013) + + This version is essentially a small bugfix release, but the addition of + aarch64 support requires that the minor version be incremented. + + Bug fixes: + - Fix race-triggered deadlocks in chunk_record(). These deadlocks were + typically triggered by multiple threads concurrently deallocating huge + objects. + + New features: + - Add support for the aarch64 architecture. + * 3.3.1 (March 6, 2013) This version fixes bugs that are typically encountered only when utilizing @@ -15,7 +28,7 @@ - Fix a locking order bug that could cause deadlock during fork if heap profiling were enabled. - Fix a chunk recycling bug that could cause the allocator to lose track of - whether a chunk was zeroed. On FreeBSD, NetBSD, and OS X, it could cause + whether a chunk was zeroed. On FreeBSD, NetBSD, and OS X, it could cause corruption if allocating via sbrk(2) (unlikely unless running with the "dss:primary" option specified). This was completely harmless on Linux unless using mlockall(2) (and unlikely even then, unless the diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/jemalloc-3.3.1/VERSION new/jemalloc-3.4.0/VERSION --- old/jemalloc-3.3.1/VERSION 2013-03-06 21:04:18.000000000 +0100 +++ new/jemalloc-3.4.0/VERSION 2013-06-03 06:06:22.000000000 +0200 @@ -1 +1 @@ -3.3.1-0-g9ef9d9e8c271cdf14f664b871a8f98c827714784 +3.4.0-0-g0ed518e5dab789ad2171bb38977a8927e2a26775 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/jemalloc-3.3.1/doc/jemalloc.3 new/jemalloc-3.4.0/doc/jemalloc.3 --- old/jemalloc-3.3.1/doc/jemalloc.3 2013-03-06 21:06:05.000000000 +0100 +++ new/jemalloc-3.4.0/doc/jemalloc.3 2013-06-03 06:07:22.000000000 +0200 @@ -2,12 +2,12 @@ .\" Title: JEMALLOC .\" Author: Jason Evans .\" Generator: DocBook XSL Stylesheets v1.76.1 <http://docbook.sf.net/> -.\" Date: 03/06/2013 +.\" Date: 06/02/2013 .\" Manual: User Manual -.\" Source: jemalloc 3.3.1-0-g9ef9d9e8c271cdf14f664b871a8f98c827714784 +.\" Source: jemalloc 3.4.0-0-g0ed518e5dab789ad2171bb38977a8927e2a26775 .\" Language: English .\" -.TH "JEMALLOC" "3" "03/06/2013" "jemalloc 3.3.1-0-g9ef9d9e8c271" "User Manual" +.TH "JEMALLOC" "3" "06/02/2013" "jemalloc 3.4.0-0-g0ed518e5dab7" "User Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -31,7 +31,7 @@ jemalloc \- general purpose memory allocation functions .SH "LIBRARY" .PP -This manual describes jemalloc 3\&.3\&.1\-0\-g9ef9d9e8c271cdf14f664b871a8f98c827714784\&. More information can be found at the +This manual describes jemalloc 3\&.4\&.0\-0\-g0ed518e5dab789ad2171bb38977a8927e2a26775\&. More information can be found at the \m[blue]\fBjemalloc website\fR\m[]\&\s-2\u[1]\d\s+2\&. .SH "SYNOPSIS" .sp @@ -376,7 +376,19 @@ The string pointed to by the global variable \fImalloc_conf\fR, the \(lqname\(rq of the file referenced by the symbolic link named /etc/malloc\&.conf, and the value of the environment variable -\fBMALLOC_CONF\fR, will be interpreted, in that order, from left to right as options\&. +\fBMALLOC_CONF\fR, will be interpreted, in that order, from left to right as options\&. Note that +\fImalloc_conf\fR +may be read before +\fBmain\fR\fB\fR +is entered, so the declaration of +\fImalloc_conf\fR +should specify an initializer that contains the final value to be read by jemalloc\&. +\fImalloc_conf\fR +is a compile\-time setting, whereas +/etc/malloc\&.conf +and +\fBMALLOC_CONF\fR +can be safely set any time prior to program invocation\&. .PP An options string is a comma\-separated list of option:value pairs\&. There is one key corresponding to each "opt\&.*" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/jemalloc-3.3.1/doc/jemalloc.html new/jemalloc-3.4.0/doc/jemalloc.html --- old/jemalloc-3.3.1/doc/jemalloc.html 2013-03-06 21:06:04.000000000 +0100 +++ new/jemalloc-3.4.0/doc/jemalloc.html 2013-06-03 06:07:20.000000000 +0200 @@ -1,4 +1,4 @@ -<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>JEMALLOC</title><meta name="generator" content="DocBook XSL Stylesheets V1.76.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" title="JEMALLOC"><a name="id286949159"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>jemalloc — general purpose memory allocation functions</p></div><div class="refsect1" title="LIBRARY"><a name="library"></a><h2>LIBRARY</h2><p>This manual describes jemalloc 3.3.1-0-g9ef9d9e8c271cdf14f664b871a8f98c827714784. More information +<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>JEMALLOC</title><meta name="generator" content="DocBook XSL Stylesheets V1.76.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" title="JEMALLOC"><a name="id286949159"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>jemalloc — general purpose memory allocation functions</p></div><div class="refsect1" title="LIBRARY"><a name="library"></a><h2>LIBRARY</h2><p>This manual describes jemalloc 3.4.0-0-g0ed518e5dab789ad2171bb38977a8927e2a26775. More information can be found at the <a class="ulink" href="http://www.canonware.com/jemalloc/" target="_top">jemalloc website</a>.</p></div><div class="refsynopsisdiv" title="SYNOPSIS"><h2>SYNOPSIS</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include <<code class="filename">stdlib.h</code>> #include <<code class="filename">jemalloc/jemalloc.h</code>></pre><div class="refsect2" title="Standard API"><a name="id286901505"></a><h3>Standard API</h3><table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table"><tr><td><code class="funcdef">void *<b class="fsfunc">malloc</b>(</code></td><td>size_t <var class="pdparam">size</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer">�</div><table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table"><tr><td><code class="funcdef">void *<b class="fsfunc">calloc</b>(</code></td><td>size_t <var class="pdparam">number</var>, </td></tr><tr><td>�</td><td>size_t <var class="pdparam">size</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer">�</div><table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table"><tr><td><code class="funcdef">int <b class="fsfunc">posix_memalign</b>(</code></td><td>void **<var class="pdparam">ptr</var>, </td></tr><tr><td>�</td><td>size_t <var class="pdparam">alignment</var>, </td></tr><tr><td>�</td><td>size_t <var class="pdparam">size</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer">�</div><table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table"><tr><td><code class="funcdef">void *<b class="fsfunc">aligned_alloc</b>(</code></td><td>size_t <var class="pdparam">alignment</var>, </td></tr><tr><td>�</td><td>size_t <var class="pdparam">size</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer">�</div><table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table"><tr><td><code class="funcdef">void *<b class="fsfunc">realloc</b>(</code></td><td>void *<var class="pdparam">ptr</var>, </td></tr><tr><td>�</td><td>size_t <var class="pdparam">size</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer">�</div><table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table"><tr><td><code class="funcdef">void <b class="fsfunc">free</b>(</code></td><td>void *<var class="pdparam">ptr</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer">�</div></div><div class="refsect2" title="Non-standard API"><a name="id286900549"></a><h3>Non-standard API</h3><table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table"><tr><td><code class="funcdef">size_t <b class="fsfunc">malloc_usable_size</b>(</code></td><td>const void *<var class="pdparam">ptr</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer">�</div><table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table"><tr><td><code class="funcdef">void <b class="fsfunc">malloc_stats_print</b>(</code></td><td>void <var class="pdparam">(*write_cb)</var> <code>(</code>void *, const char *<code>)</code> @@ -186,7 +186,13 @@ <code class="varname">malloc_conf</code>, the “name” of the file referenced by the symbolic link named <code class="filename">/etc/malloc.conf</code>, and the value of the environment variable <code class="envar">MALLOC_CONF</code>, will be interpreted, in - that order, from left to right as options.</p><p>An options string is a comma-separated list of option:value pairs. + that order, from left to right as options. Note that + <code class="varname">malloc_conf</code> may be read before + <code class="function">main</code>(<em class="parameter"><code></code></em>) is entered, so the declaration of + <code class="varname">malloc_conf</code> should specify an initializer that contains + the final value to be read by jemalloc. <code class="varname">malloc_conf</code> is + a compile-time setting, whereas <code class="filename">/etc/malloc.conf</code> and <code class="envar">MALLOC_CONF</code> + can be safely set any time prior to program invocation.</p><p>An options string is a comma-separated list of option:value pairs. There is one key corresponding to each <a class="link" href="#opt.abort"> "<code class="mallctl">opt.*</code>" </a> mallctl (see the <a class="xref" href="#mallctl_namespace" title="MALLCTL NAMESPACE">MALLCTL NAMESPACE</a> section for options @@ -1327,7 +1333,7 @@ <code class="function">malloc_stats_print</code>(<em class="parameter"><code></code></em>), followed by a string pointer. Please note that doing anything which tries to allocate memory in this function is likely to result in a crash or deadlock.</p><p>All messages are prefixed by - “<code class="computeroutput"><jemalloc>: </code>”.</p></div><div class="refsect1" title="RETURN VALUES"><a name="return_values"></a><h2>RETURN VALUES</h2><div class="refsect2" title="Standard API"><a name="id286954473"></a><h3>Standard API</h3><p>The <code class="function">malloc</code>(<em class="parameter"><code></code></em>) and + “<code class="computeroutput"><jemalloc>: </code>”.</p></div><div class="refsect1" title="RETURN VALUES"><a name="return_values"></a><h2>RETURN VALUES</h2><div class="refsect2" title="Standard API"><a name="id286954499"></a><h3>Standard API</h3><p>The <code class="function">malloc</code>(<em class="parameter"><code></code></em>) and <code class="function">calloc</code>(<em class="parameter"><code></code></em>) functions return a pointer to the allocated memory if successful; otherwise a <code class="constant">NULL</code> pointer is returned and <code class="varname">errno</code> is set to @@ -1355,7 +1361,7 @@ allocation failure. The <code class="function">realloc</code>(<em class="parameter"><code></code></em>) function always leaves the original buffer intact when an error occurs. </p><p>The <code class="function">free</code>(<em class="parameter"><code></code></em>) function returns no - value.</p></div><div class="refsect2" title="Non-standard API"><a name="id286954690"></a><h3>Non-standard API</h3><p>The <code class="function">malloc_usable_size</code>(<em class="parameter"><code></code></em>) function + value.</p></div><div class="refsect2" title="Non-standard API"><a name="id286954680"></a><h3>Non-standard API</h3><p>The <code class="function">malloc_usable_size</code>(<em class="parameter"><code></code></em>) function returns the usable size of the allocation pointed to by <em class="parameter"><code>ptr</code></em>. </p><p>The <code class="function">mallctl</code>(<em class="parameter"><code></code></em>), <code class="function">mallctlnametomib</code>(<em class="parameter"><code></code></em>), and @@ -1374,7 +1380,7 @@ occurred.</p></dd><dt><span class="term"><span class="errorname">EFAULT</span></span></dt><dd><p>An interface with side effects failed in some way not directly related to <code class="function">mallctl*</code>(<em class="parameter"><code></code></em>) read/write processing.</p></dd></dl></div><p> - </p></div><div class="refsect2" title="Experimental API"><a name="id286954842"></a><h3>Experimental API</h3><p>The <code class="function">allocm</code>(<em class="parameter"><code></code></em>), + </p></div><div class="refsect2" title="Experimental API"><a name="id286954867"></a><h3>Experimental API</h3><p>The <code class="function">allocm</code>(<em class="parameter"><code></code></em>), <code class="function">rallocm</code>(<em class="parameter"><code></code></em>), <code class="function">sallocm</code>(<em class="parameter"><code></code></em>), <code class="function">dallocm</code>(<em class="parameter"><code></code></em>), and diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/jemalloc-3.3.1/doc/jemalloc.xml.in new/jemalloc-3.4.0/doc/jemalloc.xml.in --- old/jemalloc-3.3.1/doc/jemalloc.xml.in 2013-03-06 21:04:18.000000000 +0100 +++ new/jemalloc-3.4.0/doc/jemalloc.xml.in 2013-06-03 06:06:22.000000000 +0200 @@ -432,7 +432,14 @@ referenced by the symbolic link named <filename class="symlink">/etc/malloc.conf</filename>, and the value of the environment variable <envar>MALLOC_CONF</envar>, will be interpreted, in - that order, from left to right as options.</para> + that order, from left to right as options. Note that + <varname>malloc_conf</varname> may be read before + <function>main<parameter/></function> is entered, so the declaration of + <varname>malloc_conf</varname> should specify an initializer that contains + the final value to be read by jemalloc. <varname>malloc_conf</varname> is + a compile-time setting, whereas <filename + class="symlink">/etc/malloc.conf</filename> and <envar>MALLOC_CONF</envar> + can be safely set any time prior to program invocation.</para> <para>An options string is a comma-separated list of option:value pairs. There is one key corresponding to each <link diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/jemalloc-3.3.1/include/jemalloc/internal/jemalloc_internal.h.in new/jemalloc-3.4.0/include/jemalloc/internal/jemalloc_internal.h.in --- old/jemalloc-3.3.1/include/jemalloc/internal/jemalloc_internal.h.in 2013-03-06 21:04:18.000000000 +0100 +++ new/jemalloc-3.4.0/include/jemalloc/internal/jemalloc_internal.h.in 2013-06-03 06:06:22.000000000 +0200 @@ -278,6 +278,9 @@ # ifdef __arm__ # define LG_QUANTUM 3 # endif +# ifdef __aarch64__ +# define LG_QUANTUM 4 +# endif # ifdef __hppa__ # define LG_QUANTUM 4 # endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/jemalloc-3.3.1/src/chunk.c new/jemalloc-3.4.0/src/chunk.c --- old/jemalloc-3.3.1/src/chunk.c 2013-03-06 21:04:18.000000000 +0100 +++ new/jemalloc-3.4.0/src/chunk.c 2013-06-03 06:06:22.000000000 +0200 @@ -214,7 +214,7 @@ size_t size) { bool unzeroed; - extent_node_t *xnode, *node, *prev, key; + extent_node_t *xnode, *node, *prev, *xprev, key; unzeroed = pages_purge(chunk, size); VALGRIND_MAKE_MEM_NOACCESS(chunk, size); @@ -226,6 +226,8 @@ * held. */ xnode = base_node_alloc(); + /* Use xprev to implement conditional deferred deallocation of prev. */ + xprev = NULL; malloc_mutex_lock(&chunks_mtx); key.addr = (void *)((uintptr_t)chunk + size); @@ -242,8 +244,6 @@ node->size += size; node->zeroed = (node->zeroed && (unzeroed == false)); extent_tree_szad_insert(chunks_szad, node); - if (xnode != NULL) - base_node_dealloc(xnode); } else { /* Coalescing forward failed, so insert a new node. */ if (xnode == NULL) { @@ -253,10 +253,10 @@ * already been purged, so this is only a virtual * memory leak. */ - malloc_mutex_unlock(&chunks_mtx); - return; + goto label_return; } node = xnode; + xnode = NULL; /* Prevent deallocation below. */ node->addr = chunk; node->size = size; node->zeroed = (unzeroed == false); @@ -282,9 +282,19 @@ node->zeroed = (node->zeroed && prev->zeroed); extent_tree_szad_insert(chunks_szad, node); - base_node_dealloc(prev); + xprev = prev; } + +label_return: malloc_mutex_unlock(&chunks_mtx); + /* + * Deallocate xnode and/or xprev after unlocking chunks_mtx in order to + * avoid potential deadlock. + */ + if (xnode != NULL) + base_node_dealloc(xnode); + if (xprev != NULL) + base_node_dealloc(prev); } void -- To unsubscribe, e-mail: opensuse-commit+unsubscr...@opensuse.org For additional commands, e-mail: opensuse-commit+h...@opensuse.org