svn commit: r256837 - in projects/camlock: . bin/sh contrib/binutils/gas/config contrib/jemalloc contrib/jemalloc/doc contrib/jemalloc/include/jemalloc contrib/jemalloc/include/jemalloc/internal co...

Alexander Motin mav at FreeBSD.org
Mon Oct 21 09:03:36 UTC 2013


Author: mav
Date: Mon Oct 21 09:03:30 2013
New Revision: 256837
URL: http://svnweb.freebsd.org/changeset/base/256837

Log:
  MFC @ r256836

Added:
  projects/camlock/share/man/man4/altera_atse.4
     - copied unchanged from r256836, head/share/man/man4/altera_atse.4
  projects/camlock/sys/arm/conf/IMX53-QSB
     - copied unchanged from r256836, head/sys/arm/conf/IMX53-QSB
  projects/camlock/sys/boot/fdt/dts/imx53-qsb.dts
     - copied unchanged from r256836, head/sys/boot/fdt/dts/imx53-qsb.dts
  projects/camlock/sys/dev/altera/atse/
     - copied from r256836, head/sys/dev/altera/atse/
  projects/camlock/sys/dev/ffec/
     - copied from r256836, head/sys/dev/ffec/
  projects/camlock/sys/powerpc/powerpc/clock.c
     - copied unchanged from r256836, head/sys/powerpc/powerpc/clock.c
  projects/camlock/sys/powerpc/powerpc/nexus.c
     - copied unchanged from r256836, head/sys/powerpc/powerpc/nexus.c
  projects/camlock/sys/powerpc/powerpc/vm_machdep.c
     - copied unchanged from r256836, head/sys/powerpc/powerpc/vm_machdep.c
  projects/camlock/sys/powerpc/pseries/phyp_llan.c
     - copied unchanged from r256836, head/sys/powerpc/pseries/phyp_llan.c
Deleted:
  projects/camlock/sys/powerpc/aim/clock.c
  projects/camlock/sys/powerpc/aim/nexus.c
  projects/camlock/sys/powerpc/aim/vm_machdep.c
  projects/camlock/sys/powerpc/booke/clock.c
  projects/camlock/sys/powerpc/booke/vm_machdep.c
  projects/camlock/sys/powerpc/mpc85xx/nexus.c
Modified:
  projects/camlock/ObsoleteFiles.inc
  projects/camlock/bin/sh/jobs.c
  projects/camlock/contrib/binutils/gas/config/tc-arm.c
  projects/camlock/contrib/jemalloc/ChangeLog
  projects/camlock/contrib/jemalloc/FREEBSD-diffs
  projects/camlock/contrib/jemalloc/FREEBSD-upgrade
  projects/camlock/contrib/jemalloc/VERSION
  projects/camlock/contrib/jemalloc/doc/jemalloc.3
  projects/camlock/contrib/jemalloc/include/jemalloc/internal/arena.h
  projects/camlock/contrib/jemalloc/include/jemalloc/internal/jemalloc_internal.h
  projects/camlock/contrib/jemalloc/include/jemalloc/internal/private_namespace.h
  projects/camlock/contrib/jemalloc/include/jemalloc/internal/tcache.h
  projects/camlock/contrib/jemalloc/include/jemalloc/jemalloc.h
  projects/camlock/contrib/jemalloc/src/arena.c
  projects/camlock/contrib/jemalloc/src/chunk.c
  projects/camlock/contrib/jemalloc/src/ctl.c
  projects/camlock/contrib/jemalloc/src/jemalloc.c
  projects/camlock/etc/defaults/rc.conf
  projects/camlock/etc/mtree/BSD.usr.dist
  projects/camlock/etc/rc
  projects/camlock/etc/rc.d/jail
  projects/camlock/etc/rc.d/sendmail
  projects/camlock/etc/sendmail/freebsd.mc
  projects/camlock/lib/libc/gen/popen.c
  projects/camlock/lib/libc/gen/syslog.c
  projects/camlock/lib/libc/iconv/citrus_mapper.c
  projects/camlock/lib/libcrypt/tests/Makefile
  projects/camlock/sbin/ifconfig/ifconfig.8
  projects/camlock/sbin/ifconfig/ifgroup.c
  projects/camlock/sbin/route/route.c
  projects/camlock/share/man/man4/Makefile
  projects/camlock/share/man/man5/rc.conf.5
  projects/camlock/share/man/man8/rc.8
  projects/camlock/share/man/man8/rc.sendmail.8
  projects/camlock/share/mk/atf.test.mk
  projects/camlock/share/mk/bsd.test.mk
  projects/camlock/sys/arm/arm/cpufunc_asm_armv7.S
  projects/camlock/sys/arm/arm/fusu.S
  projects/camlock/sys/arm/arm/pmap-v6.c
  projects/camlock/sys/arm/freescale/imx/files.imx53
  projects/camlock/sys/arm/freescale/imx/imx51_ccm.c
  projects/camlock/sys/arm/include/pmap.h
  projects/camlock/sys/arm/mv/common.c
  projects/camlock/sys/arm/mv/mvreg.h
  projects/camlock/sys/arm/xscale/i80321/ep80219_machdep.c
  projects/camlock/sys/arm/xscale/i80321/iq31244_machdep.c
  projects/camlock/sys/arm/xscale/i8134x/crb_machdep.c
  projects/camlock/sys/arm/xscale/ixp425/avila_machdep.c
  projects/camlock/sys/arm/xscale/pxa/pxa_machdep.c
  projects/camlock/sys/boot/fdt/dts/digi-ccwmx53.dts
  projects/camlock/sys/cddl/contrib/opensolaris/uts/intel/dtrace/fasttrap_isa.c
  projects/camlock/sys/cddl/dev/dtrace/amd64/dtrace_isa.c
  projects/camlock/sys/conf/files
  projects/camlock/sys/conf/files.powerpc
  projects/camlock/sys/conf/options
  projects/camlock/sys/contrib/dev/run/rt2870.fw.uu
  projects/camlock/sys/dev/altera/sdcard/altera_sdcard.c
  projects/camlock/sys/dev/altera/sdcard/altera_sdcard_io.c
  projects/camlock/sys/dev/cfi/cfi_core.c
  projects/camlock/sys/dev/cxgbe/iw_cxgbe/device.c
  projects/camlock/sys/dev/drm2/radeon/radeon_drv.c
  projects/camlock/sys/dev/fdt/fdtbus.c
  projects/camlock/sys/dev/ofw/ofw_bus_subr.c
  projects/camlock/sys/dev/re/if_re.c
  projects/camlock/sys/dev/uart/uart_dev_pl011.c
  projects/camlock/sys/dev/usb/controller/xhci.c
  projects/camlock/sys/dev/usb/serial/uslcom.c
  projects/camlock/sys/dev/usb/usbdevs
  projects/camlock/sys/dev/usb/wlan/if_run.c
  projects/camlock/sys/dev/usb/wlan/if_runreg.h
  projects/camlock/sys/geom/geom_slice.c
  projects/camlock/sys/geom/label/g_label.c
  projects/camlock/sys/kern/subr_taskqueue.c
  projects/camlock/sys/mips/beri/beri_machdep.c
  projects/camlock/sys/mips/beri/files.beri
  projects/camlock/sys/modules/Makefile
  projects/camlock/sys/modules/cxgb/Makefile
  projects/camlock/sys/modules/cxgbe/Makefile
  projects/camlock/sys/net/if_media.h
  projects/camlock/sys/netinet/in.h
  projects/camlock/sys/pci/if_rlreg.h
  projects/camlock/sys/powerpc/aim/machdep.c
  projects/camlock/sys/powerpc/booke/machdep.c
  projects/camlock/sys/powerpc/conf/GENERIC64
  projects/camlock/sys/powerpc/ofw/ofw_pci.c
  projects/camlock/sys/powerpc/ofw/ofw_pcib_pci.c
  projects/camlock/sys/powerpc/ofw/ofw_pcibus.c
  projects/camlock/sys/powerpc/pseries/phyp-hvcall.S
  projects/camlock/sys/sys/_task.h
  projects/camlock/sys/sys/param.h
  projects/camlock/sys/sys/taskqueue.h
  projects/camlock/sys/ufs/ffs/ffs_extern.h
  projects/camlock/sys/ufs/ffs/ffs_softdep.c
  projects/camlock/sys/ufs/ffs/ffs_vfsops.c
  projects/camlock/sys/ufs/ffs/softdep.h
  projects/camlock/sys/ufs/ufs/ufs_extern.h
  projects/camlock/sys/ufs/ufs/ufsmount.h
  projects/camlock/sys/xen/xen-os.h
  projects/camlock/tools/build/mk/OptionalObsoleteFiles.inc
  projects/camlock/usr.bin/pathchk/pathchk.c
  projects/camlock/usr.sbin/bhyve/bhyverun.c
  projects/camlock/usr.sbin/bhyve/bhyverun.h
  projects/camlock/usr.sbin/bhyve/mptbl.c
  projects/camlock/usr.sbin/bhyve/pci_ahci.c
  projects/camlock/usr.sbin/bhyve/pci_hostbridge.c
  projects/camlock/usr.sbin/bhyve/pci_virtio_block.c
  projects/camlock/usr.sbin/bhyve/pci_virtio_net.c
  projects/camlock/usr.sbin/bhyve/rtc.c
  projects/camlock/usr.sbin/freebsd-update/freebsd-update.sh
  projects/camlock/usr.sbin/pkg/pkg.c
Directory Properties:
  projects/camlock/   (props changed)
  projects/camlock/contrib/binutils/   (props changed)
  projects/camlock/lib/libc/   (props changed)
  projects/camlock/sbin/   (props changed)
  projects/camlock/share/man/man4/   (props changed)
  projects/camlock/sys/   (props changed)
  projects/camlock/sys/boot/   (props changed)
  projects/camlock/sys/cddl/contrib/opensolaris/   (props changed)
  projects/camlock/sys/conf/   (props changed)
  projects/camlock/usr.sbin/bhyve/   (props changed)

Modified: projects/camlock/ObsoleteFiles.inc
==============================================================================
--- projects/camlock/ObsoleteFiles.inc	Mon Oct 21 08:57:27 2013	(r256836)
+++ projects/camlock/ObsoleteFiles.inc	Mon Oct 21 09:03:30 2013	(r256837)
@@ -97,7 +97,7 @@ OLD_FILES+=usr/include/lwres/result.h
 OLD_FILES+=usr/include/lwres/version.h
 OLD_FILES+=usr/lib/liblwres.a
 OLD_FILES+=usr/lib/liblwres.so
-OLD_LIBS+=usr/lib/liblwres.so.50
+OLD_LIBS+=usr/lib/liblwres.so.90
 OLD_FILES+=usr/lib/liblwres_p.a
 OLD_FILES+=usr/sbin/arpaname
 OLD_FILES+=usr/sbin/ddns-confgen
@@ -107,6 +107,7 @@ OLD_FILES+=usr/sbin/dnssec-keygen
 OLD_FILES+=usr/sbin/dnssec-revoke
 OLD_FILES+=usr/sbin/dnssec-settime
 OLD_FILES+=usr/sbin/dnssec-signzone
+OLD_FILES+=usr/sbin/dnssec-verify
 OLD_FILES+=usr/sbin/genrandom
 OLD_FILES+=usr/sbin/isc-hmac-fixup
 OLD_FILES+=usr/sbin/lwresd
@@ -270,6 +271,7 @@ OLD_FILES+=usr/share/man/man8/dnssec-key
 OLD_FILES+=usr/share/man/man8/dnssec-revoke.8.gz
 OLD_FILES+=usr/share/man/man8/dnssec-settime.8.gz
 OLD_FILES+=usr/share/man/man8/dnssec-signzone.8.gz
+OLD_FILES+=usr/share/man/man8/dnssec-verify.8.gz
 OLD_FILES+=usr/share/man/man8/genrandom.8.gz
 OLD_FILES+=usr/share/man/man8/isc-hmac-fixup.8.gz
 OLD_FILES+=usr/share/man/man8/lwresd.8.gz
@@ -304,6 +306,8 @@ OLD_DIRS+=var/named/var/run
 OLD_DIRS+=var/named/var/run/named
 OLD_DIRS+=var/named/var/stats
 OLD_DIRS+=var/run/named
+# 20130923: example moved
+OLD_FILES+=usr/share/examples/bsdconfig/browse_packages.sh
 # 20130908: libssh becomes private
 OLD_FILES+=usr/lib/libssh.a
 OLD_FILES+=usr/lib/libssh.so

Modified: projects/camlock/bin/sh/jobs.c
==============================================================================
--- projects/camlock/bin/sh/jobs.c	Mon Oct 21 08:57:27 2013	(r256836)
+++ projects/camlock/bin/sh/jobs.c	Mon Oct 21 09:03:30 2013	(r256837)
@@ -978,7 +978,6 @@ int
 waitforjob(struct job *jp, int *origstatus)
 {
 #if JOBS
-	pid_t mypgrp = getpgrp();
 	int propagate_int = jp->jobctl && jp->foreground;
 #endif
 	int status;
@@ -992,7 +991,7 @@ waitforjob(struct job *jp, int *origstat
 			dotrap();
 #if JOBS
 	if (jp->jobctl) {
-		if (tcsetpgrp(ttyfd, mypgrp) < 0)
+		if (tcsetpgrp(ttyfd, rootpid) < 0)
 			error("tcsetpgrp failed, errno=%d\n", errno);
 	}
 	if (jp->state == JOBSTOPPED)

Modified: projects/camlock/contrib/binutils/gas/config/tc-arm.c
==============================================================================
--- projects/camlock/contrib/binutils/gas/config/tc-arm.c	Mon Oct 21 08:57:27 2013	(r256836)
+++ projects/camlock/contrib/binutils/gas/config/tc-arm.c	Mon Oct 21 09:03:30 2013	(r256837)
@@ -12660,14 +12660,14 @@ do_vfp_nsyn_cvt (enum neon_shape rs, int
       /* Conversions without bitshift.  */
       const char *enc[] =
         {
-          "ftosis",
-          "ftouis",
+          "ftosizs",
+          "ftouizs",
           "fsitos",
           "fuitos",
           "fcvtsd",
           "fcvtds",
-          "ftosid",
-          "ftouid",
+          "ftosizd",
+          "ftouizd",
           "fsitod",
           "fuitod"
         };

Modified: projects/camlock/contrib/jemalloc/ChangeLog
==============================================================================
--- projects/camlock/contrib/jemalloc/ChangeLog	Mon Oct 21 08:57:27 2013	(r256836)
+++ projects/camlock/contrib/jemalloc/ChangeLog	Mon Oct 21 09:03:30 2013	(r256837)
@@ -6,6 +6,21 @@ found in the git revision history:
     http://www.canonware.com/cgi-bin/gitweb.cgi?p=jemalloc.git
     git://canonware.com/jemalloc.git
 
+* 3.4.1 (October 20, 2013)
+
+  Bug fixes:
+  - Fix a race in the "arenas.extend" mallctl that could cause memory corruption
+    of internal data structures and subsequent crashes.
+  - Fix Valgrind integration flaws that caused Valgrind warnings about reads of
+    uninitialized memory in:
+    + arena chunk headers
+    + internal zero-initialized data structures (relevant to tcache and prof
+      code)
+  - Preserve errno during the first allocation.  A readlink(2) call during
+    initialization fails unless /etc/malloc.conf exists, so errno was typically
+    set during the first allocation prior to this fix.
+  - Fix compilation warnings reported by gcc 4.8.1.
+
 * 3.4.0 (June 2, 2013)
 
   This version is essentially a small bugfix release, but the addition of
@@ -60,7 +75,7 @@ found in the git revision history:
 
   Bug fixes:
   - Fix "arenas.extend" mallctl to output the number of arenas.
-  - Fix chunk_recycyle() to unconditionally inform Valgrind that returned memory
+  - Fix chunk_recycle() to unconditionally inform Valgrind that returned memory
     is undefined.
   - Fix build break on FreeBSD related to alloca.h.
 

Modified: projects/camlock/contrib/jemalloc/FREEBSD-diffs
==============================================================================
--- projects/camlock/contrib/jemalloc/FREEBSD-diffs	Mon Oct 21 08:57:27 2013	(r256836)
+++ projects/camlock/contrib/jemalloc/FREEBSD-diffs	Mon Oct 21 09:03:30 2013	(r256837)
@@ -45,7 +45,7 @@ index abd5e6f..1d7491a 100644
 +  </refsect1>
  </refentry>
 diff --git a/include/jemalloc/internal/jemalloc_internal.h.in b/include/jemalloc/internal/jemalloc_internal.h.in
-index e46ac54..527449d 100644
+index 53c135c..c547339 100644
 --- a/include/jemalloc/internal/jemalloc_internal.h.in
 +++ b/include/jemalloc/internal/jemalloc_internal.h.in
 @@ -1,5 +1,8 @@
@@ -97,10 +97,10 @@ index de44e14..564d604 100644
  
  bool	malloc_mutex_init(malloc_mutex_t *mutex);
 diff --git a/include/jemalloc/internal/private_namespace.h b/include/jemalloc/internal/private_namespace.h
-index 65de316..366676b 100644
+index cdb0b0e..2a98d1f 100644
 --- a/include/jemalloc/internal/private_namespace.h
 +++ b/include/jemalloc/internal/private_namespace.h
-@@ -216,7 +216,6 @@
+@@ -218,7 +218,6 @@
  #define	iralloc JEMALLOC_N(iralloc)
  #define	irallocx JEMALLOC_N(irallocx)
  #define	isalloc JEMALLOC_N(isalloc)
@@ -244,7 +244,7 @@ index 0000000..e6c8407
 +#endif
 +
 diff --git a/src/jemalloc.c b/src/jemalloc.c
-index bc350ed..352c98e 100644
+index ae56db6..1412a5e 100644
 --- a/src/jemalloc.c
 +++ b/src/jemalloc.c
 @@ -8,6 +8,10 @@ malloc_tsd_data(, arenas, arena_t *, NULL)

Modified: projects/camlock/contrib/jemalloc/FREEBSD-upgrade
==============================================================================
--- projects/camlock/contrib/jemalloc/FREEBSD-upgrade	Mon Oct 21 08:57:27 2013	(r256836)
+++ projects/camlock/contrib/jemalloc/FREEBSD-upgrade	Mon Oct 21 09:03:30 2013	(r256837)
@@ -60,7 +60,7 @@ do_extract() {
   local rev=$1
   # Clone.
   rm -rf ${work}
-  git clone git://canonware.com/jemalloc.git ${work}
+  git clone https://github.com/jemalloc/jemalloc.git ${work}
   (
     cd ${work}
     if [ "x${rev}" != "x" ] ; then

Modified: projects/camlock/contrib/jemalloc/VERSION
==============================================================================
--- projects/camlock/contrib/jemalloc/VERSION	Mon Oct 21 08:57:27 2013	(r256836)
+++ projects/camlock/contrib/jemalloc/VERSION	Mon Oct 21 09:03:30 2013	(r256837)
@@ -1 +1 @@
-3.4.0-0-g0ed518e5dab789ad2171bb38977a8927e2a26775
+3.4.1-0-g0135fb806e4137dc9cdf152541926a2bc95e33f0

Modified: projects/camlock/contrib/jemalloc/doc/jemalloc.3
==============================================================================
--- projects/camlock/contrib/jemalloc/doc/jemalloc.3	Mon Oct 21 08:57:27 2013	(r256836)
+++ projects/camlock/contrib/jemalloc/doc/jemalloc.3	Mon Oct 21 09:03:30 2013	(r256837)
@@ -2,12 +2,12 @@
 .\"     Title: JEMALLOC
 .\"    Author: Jason Evans
 .\" Generator: DocBook XSL Stylesheets v1.76.1 <http://docbook.sf.net/>
-.\"      Date: 06/02/2013
+.\"      Date: 10/20/2013
 .\"    Manual: User Manual
-.\"    Source: jemalloc 3.4.0-0-g0ed518e5dab789ad2171bb38977a8927e2a26775
+.\"    Source: jemalloc 3.4.1-0-g0135fb806e4137dc9cdf152541926a2bc95e33f0
 .\"  Language: English
 .\"
-.TH "JEMALLOC" "3" "06/02/2013" "jemalloc 3.4.0-0-g0ed518e5dab7" "User Manual"
+.TH "JEMALLOC" "3" "10/20/2013" "jemalloc 3.4.1-0-g0135fb806e41" "User Manual"
 .\" -----------------------------------------------------------------
 .\" * Define some portability stuff
 .\" -----------------------------------------------------------------
@@ -31,7 +31,7 @@
 jemalloc \- general purpose memory allocation functions
 .SH "LIBRARY"
 .PP
-This manual describes jemalloc 3\&.4\&.0\-0\-g0ed518e5dab789ad2171bb38977a8927e2a26775\&. More information can be found at the
+This manual describes jemalloc 3\&.4\&.1\-0\-g0135fb806e4137dc9cdf152541926a2bc95e33f0\&. More information can be found at the
 \m[blue]\fBjemalloc website\fR\m[]\&\s-2\u[1]\d\s+2\&.
 .PP
 The following configuration options are enabled in libc\*(Aqs built\-in jemalloc:

Modified: projects/camlock/contrib/jemalloc/include/jemalloc/internal/arena.h
==============================================================================
--- projects/camlock/contrib/jemalloc/include/jemalloc/internal/arena.h	Mon Oct 21 08:57:27 2013	(r256836)
+++ projects/camlock/contrib/jemalloc/include/jemalloc/internal/arena.h	Mon Oct 21 09:03:30 2013	(r256837)
@@ -441,6 +441,7 @@ void	arena_postfork_child(arena_t *arena
 #ifndef JEMALLOC_ENABLE_INLINE
 arena_chunk_map_t	*arena_mapp_get(arena_chunk_t *chunk, size_t pageind);
 size_t	*arena_mapbitsp_get(arena_chunk_t *chunk, size_t pageind);
+size_t	arena_mapbitsp_read(size_t *mapbitsp);
 size_t	arena_mapbits_get(arena_chunk_t *chunk, size_t pageind);
 size_t	arena_mapbits_unallocated_size_get(arena_chunk_t *chunk,
     size_t pageind);
@@ -451,6 +452,7 @@ size_t	arena_mapbits_dirty_get(arena_chu
 size_t	arena_mapbits_unzeroed_get(arena_chunk_t *chunk, size_t pageind);
 size_t	arena_mapbits_large_get(arena_chunk_t *chunk, size_t pageind);
 size_t	arena_mapbits_allocated_get(arena_chunk_t *chunk, size_t pageind);
+void	arena_mapbitsp_write(size_t *mapbitsp, size_t mapbits);
 void	arena_mapbits_unallocated_set(arena_chunk_t *chunk, size_t pageind,
     size_t size, size_t flags);
 void	arena_mapbits_unallocated_size_set(arena_chunk_t *chunk, size_t pageind,
@@ -498,10 +500,17 @@ arena_mapbitsp_get(arena_chunk_t *chunk,
 }
 
 JEMALLOC_ALWAYS_INLINE size_t
+arena_mapbitsp_read(size_t *mapbitsp)
+{
+
+	return (*mapbitsp);
+}
+
+JEMALLOC_ALWAYS_INLINE size_t
 arena_mapbits_get(arena_chunk_t *chunk, size_t pageind)
 {
 
-	return (*arena_mapbitsp_get(chunk, pageind));
+	return (arena_mapbitsp_read(arena_mapbitsp_get(chunk, pageind)));
 }
 
 JEMALLOC_ALWAYS_INLINE size_t
@@ -585,82 +594,89 @@ arena_mapbits_allocated_get(arena_chunk_
 }
 
 JEMALLOC_ALWAYS_INLINE void
+arena_mapbitsp_write(size_t *mapbitsp, size_t mapbits)
+{
+
+	*mapbitsp = mapbits;
+}
+
+JEMALLOC_ALWAYS_INLINE void
 arena_mapbits_unallocated_set(arena_chunk_t *chunk, size_t pageind, size_t size,
     size_t flags)
 {
-	size_t *mapbitsp;
+	size_t *mapbitsp = arena_mapbitsp_get(chunk, pageind);
 
-	mapbitsp = arena_mapbitsp_get(chunk, pageind);
 	assert((size & PAGE_MASK) == 0);
 	assert((flags & ~CHUNK_MAP_FLAGS_MASK) == 0);
 	assert((flags & (CHUNK_MAP_DIRTY|CHUNK_MAP_UNZEROED)) == flags);
-	*mapbitsp = size | CHUNK_MAP_BININD_INVALID | flags;
+	arena_mapbitsp_write(mapbitsp, size | CHUNK_MAP_BININD_INVALID | flags);
 }
 
 JEMALLOC_ALWAYS_INLINE void
 arena_mapbits_unallocated_size_set(arena_chunk_t *chunk, size_t pageind,
     size_t size)
 {
-	size_t *mapbitsp;
+	size_t *mapbitsp = arena_mapbitsp_get(chunk, pageind);
+	size_t mapbits = arena_mapbitsp_read(mapbitsp);
 
-	mapbitsp = arena_mapbitsp_get(chunk, pageind);
 	assert((size & PAGE_MASK) == 0);
-	assert((*mapbitsp & (CHUNK_MAP_LARGE|CHUNK_MAP_ALLOCATED)) == 0);
-	*mapbitsp = size | (*mapbitsp & PAGE_MASK);
+	assert((mapbits & (CHUNK_MAP_LARGE|CHUNK_MAP_ALLOCATED)) == 0);
+	arena_mapbitsp_write(mapbitsp, size | (mapbits & PAGE_MASK));
 }
 
 JEMALLOC_ALWAYS_INLINE void
 arena_mapbits_large_set(arena_chunk_t *chunk, size_t pageind, size_t size,
     size_t flags)
 {
-	size_t *mapbitsp;
+	size_t *mapbitsp = arena_mapbitsp_get(chunk, pageind);
+	size_t mapbits = arena_mapbitsp_read(mapbitsp);
 	size_t unzeroed;
 
-	mapbitsp = arena_mapbitsp_get(chunk, pageind);
 	assert((size & PAGE_MASK) == 0);
 	assert((flags & CHUNK_MAP_DIRTY) == flags);
-	unzeroed = *mapbitsp & CHUNK_MAP_UNZEROED; /* Preserve unzeroed. */
-	*mapbitsp = size | CHUNK_MAP_BININD_INVALID | flags | unzeroed |
-	    CHUNK_MAP_LARGE | CHUNK_MAP_ALLOCATED;
+	unzeroed = mapbits & CHUNK_MAP_UNZEROED; /* Preserve unzeroed. */
+	arena_mapbitsp_write(mapbitsp, size | CHUNK_MAP_BININD_INVALID | flags
+	    | unzeroed | CHUNK_MAP_LARGE | CHUNK_MAP_ALLOCATED);
 }
 
 JEMALLOC_ALWAYS_INLINE void
 arena_mapbits_large_binind_set(arena_chunk_t *chunk, size_t pageind,
     size_t binind)
 {
-	size_t *mapbitsp;
+	size_t *mapbitsp = arena_mapbitsp_get(chunk, pageind);
+	size_t mapbits = arena_mapbitsp_read(mapbitsp);
 
 	assert(binind <= BININD_INVALID);
-	mapbitsp = arena_mapbitsp_get(chunk, pageind);
 	assert(arena_mapbits_large_size_get(chunk, pageind) == PAGE);
-	*mapbitsp = (*mapbitsp & ~CHUNK_MAP_BININD_MASK) | (binind <<
-	    CHUNK_MAP_BININD_SHIFT);
+	arena_mapbitsp_write(mapbitsp, (mapbits & ~CHUNK_MAP_BININD_MASK) |
+	    (binind << CHUNK_MAP_BININD_SHIFT));
 }
 
 JEMALLOC_ALWAYS_INLINE void
 arena_mapbits_small_set(arena_chunk_t *chunk, size_t pageind, size_t runind,
     size_t binind, size_t flags)
 {
-	size_t *mapbitsp;
+	size_t *mapbitsp = arena_mapbitsp_get(chunk, pageind);
+	size_t mapbits = arena_mapbitsp_read(mapbitsp);
 	size_t unzeroed;
 
 	assert(binind < BININD_INVALID);
-	mapbitsp = arena_mapbitsp_get(chunk, pageind);
 	assert(pageind - runind >= map_bias);
 	assert((flags & CHUNK_MAP_DIRTY) == flags);
-	unzeroed = *mapbitsp & CHUNK_MAP_UNZEROED; /* Preserve unzeroed. */
-	*mapbitsp = (runind << LG_PAGE) | (binind << CHUNK_MAP_BININD_SHIFT) |
-	    flags | unzeroed | CHUNK_MAP_ALLOCATED;
+	unzeroed = mapbits & CHUNK_MAP_UNZEROED; /* Preserve unzeroed. */
+	arena_mapbitsp_write(mapbitsp, (runind << LG_PAGE) | (binind <<
+	    CHUNK_MAP_BININD_SHIFT) | flags | unzeroed | CHUNK_MAP_ALLOCATED);
 }
 
 JEMALLOC_ALWAYS_INLINE void
 arena_mapbits_unzeroed_set(arena_chunk_t *chunk, size_t pageind,
     size_t unzeroed)
 {
-	size_t *mapbitsp;
+	size_t *mapbitsp = arena_mapbitsp_get(chunk, pageind);
+	size_t mapbits = arena_mapbitsp_read(mapbitsp);
 
-	mapbitsp = arena_mapbitsp_get(chunk, pageind);
-	*mapbitsp = (*mapbitsp & ~CHUNK_MAP_UNZEROED) | unzeroed;
+	arena_mapbitsp_write(mapbitsp, (mapbits & ~CHUNK_MAP_UNZEROED) |
+	    unzeroed);
 }
 
 JEMALLOC_INLINE bool

Modified: projects/camlock/contrib/jemalloc/include/jemalloc/internal/jemalloc_internal.h
==============================================================================
--- projects/camlock/contrib/jemalloc/include/jemalloc/internal/jemalloc_internal.h	Mon Oct 21 08:57:27 2013	(r256836)
+++ projects/camlock/contrib/jemalloc/include/jemalloc/internal/jemalloc_internal.h	Mon Oct 21 09:03:30 2013	(r256837)
@@ -232,9 +232,18 @@ static const bool config_ivsalloc =
 #  define	__DECONST(type, var)	((type)(uintptr_t)(const void *)(var))
 #endif
 
+/*
+ * JEMALLOC_ALWAYS_INLINE is used within header files for functions that are
+ * static inline functions if inlining is enabled, and single-definition
+ * library-private functions if inlining is disabled.
+ *
+ * JEMALLOC_ALWAYS_INLINE_C is for use in .c files, in which case the denoted
+ * functions are always static, regardless of whether inlining is enabled.
+ */
 #ifdef JEMALLOC_DEBUG
    /* Disable inlining to make debugging easier. */
 #  define JEMALLOC_ALWAYS_INLINE
+#  define JEMALLOC_ALWAYS_INLINE_C static
 #  define JEMALLOC_INLINE
 #  define inline
 #else
@@ -242,8 +251,11 @@ static const bool config_ivsalloc =
 #  ifdef JEMALLOC_HAVE_ATTR
 #    define JEMALLOC_ALWAYS_INLINE \
 	 static inline JEMALLOC_ATTR(unused) JEMALLOC_ATTR(always_inline)
+#    define JEMALLOC_ALWAYS_INLINE_C \
+	 static inline JEMALLOC_ATTR(always_inline)
 #  else
 #    define JEMALLOC_ALWAYS_INLINE static inline
+#    define JEMALLOC_ALWAYS_INLINE_C static inline
 #  endif
 #  define JEMALLOC_INLINE static inline
 #  ifdef _MSC_VER

Modified: projects/camlock/contrib/jemalloc/include/jemalloc/internal/private_namespace.h
==============================================================================
--- projects/camlock/contrib/jemalloc/include/jemalloc/internal/private_namespace.h	Mon Oct 21 08:57:27 2013	(r256836)
+++ projects/camlock/contrib/jemalloc/include/jemalloc/internal/private_namespace.h	Mon Oct 21 09:03:30 2013	(r256837)
@@ -33,6 +33,8 @@
 #define	arena_mapbits_unzeroed_get JEMALLOC_N(arena_mapbits_unzeroed_get)
 #define	arena_mapbits_unzeroed_set JEMALLOC_N(arena_mapbits_unzeroed_set)
 #define	arena_mapbitsp_get JEMALLOC_N(arena_mapbitsp_get)
+#define	arena_mapbitsp_read JEMALLOC_N(arena_mapbitsp_read)
+#define	arena_mapbitsp_write JEMALLOC_N(arena_mapbitsp_write)
 #define	arena_mapp_get JEMALLOC_N(arena_mapp_get)
 #define	arena_maxclass JEMALLOC_N(arena_maxclass)
 #define	arena_new JEMALLOC_N(arena_new)

Modified: projects/camlock/contrib/jemalloc/include/jemalloc/internal/tcache.h
==============================================================================
--- projects/camlock/contrib/jemalloc/include/jemalloc/internal/tcache.h	Mon Oct 21 08:57:27 2013	(r256836)
+++ projects/camlock/contrib/jemalloc/include/jemalloc/internal/tcache.h	Mon Oct 21 09:03:30 2013	(r256837)
@@ -313,6 +313,7 @@ tcache_alloc_small(tcache_t *tcache, siz
 			} else if (opt_zero)
 				memset(ret, 0, size);
 		}
+		VALGRIND_MAKE_MEM_UNDEFINED(ret, size);
 	} else {
 		if (config_fill && opt_junk) {
 			arena_alloc_junk_small(ret, &arena_bin_info[binind],
@@ -321,7 +322,6 @@ tcache_alloc_small(tcache_t *tcache, siz
 		VALGRIND_MAKE_MEM_UNDEFINED(ret, size);
 		memset(ret, 0, size);
 	}
-	VALGRIND_MAKE_MEM_UNDEFINED(ret, size);
 
 	if (config_stats)
 		tbin->tstats.nrequests++;
@@ -368,11 +368,11 @@ tcache_alloc_large(tcache_t *tcache, siz
 				else if (opt_zero)
 					memset(ret, 0, size);
 			}
+			VALGRIND_MAKE_MEM_UNDEFINED(ret, size);
 		} else {
 			VALGRIND_MAKE_MEM_UNDEFINED(ret, size);
 			memset(ret, 0, size);
 		}
-		VALGRIND_MAKE_MEM_UNDEFINED(ret, size);
 
 		if (config_stats)
 			tbin->tstats.nrequests++;

Modified: projects/camlock/contrib/jemalloc/include/jemalloc/jemalloc.h
==============================================================================
--- projects/camlock/contrib/jemalloc/include/jemalloc/jemalloc.h	Mon Oct 21 08:57:27 2013	(r256836)
+++ projects/camlock/contrib/jemalloc/include/jemalloc/jemalloc.h	Mon Oct 21 09:03:30 2013	(r256837)
@@ -7,12 +7,12 @@ extern "C" {
 #include <limits.h>
 #include <strings.h>
 
-#define	JEMALLOC_VERSION "3.4.0-0-g0ed518e5dab789ad2171bb38977a8927e2a26775"
+#define	JEMALLOC_VERSION "3.4.1-0-g0135fb806e4137dc9cdf152541926a2bc95e33f0"
 #define	JEMALLOC_VERSION_MAJOR 3
 #define	JEMALLOC_VERSION_MINOR 4
-#define	JEMALLOC_VERSION_BUGFIX 0
+#define	JEMALLOC_VERSION_BUGFIX 1
 #define	JEMALLOC_VERSION_NREV 0
-#define	JEMALLOC_VERSION_GID "0ed518e5dab789ad2171bb38977a8927e2a26775"
+#define	JEMALLOC_VERSION_GID "0135fb806e4137dc9cdf152541926a2bc95e33f0"
 
 #include "jemalloc_defs.h"
 #include "jemalloc_FreeBSD.h"

Modified: projects/camlock/contrib/jemalloc/src/arena.c
==============================================================================
--- projects/camlock/contrib/jemalloc/src/arena.c	Mon Oct 21 08:57:27 2013	(r256836)
+++ projects/camlock/contrib/jemalloc/src/arena.c	Mon Oct 21 09:03:30 2013	(r256837)
@@ -369,13 +369,20 @@ arena_run_zero(arena_chunk_t *chunk, siz
 }
 
 static inline void
+arena_run_page_mark_zeroed(arena_chunk_t *chunk, size_t run_ind)
+{
+
+	VALGRIND_MAKE_MEM_DEFINED((void *)((uintptr_t)chunk + (run_ind <<
+	    LG_PAGE)), PAGE);
+}
+
+static inline void
 arena_run_page_validate_zeroed(arena_chunk_t *chunk, size_t run_ind)
 {
 	size_t i;
 	UNUSED size_t *p = (size_t *)((uintptr_t)chunk + (run_ind << LG_PAGE));
 
-	VALGRIND_MAKE_MEM_DEFINED((void *)((uintptr_t)chunk + (run_ind <<
-	    LG_PAGE)), PAGE);
+	arena_run_page_mark_zeroed(chunk, run_ind);
 	for (i = 0; i < PAGE / sizeof(size_t); i++)
 		assert(p[i] == 0);
 }
@@ -458,6 +465,9 @@ arena_run_split(arena_t *arena, arena_ru
 					} else if (config_debug) {
 						arena_run_page_validate_zeroed(
 						    chunk, run_ind+i);
+					} else {
+						arena_run_page_mark_zeroed(
+						    chunk, run_ind+i);
 					}
 				}
 			} else {
@@ -467,6 +477,9 @@ arena_run_split(arena_t *arena, arena_ru
 				 */
 				arena_run_zero(chunk, run_ind, need_pages);
 			}
+		} else {
+			VALGRIND_MAKE_MEM_UNDEFINED((void *)((uintptr_t)chunk +
+			    (run_ind << LG_PAGE)), (need_pages << LG_PAGE));
 		}
 
 		/*
@@ -508,9 +521,9 @@ arena_run_split(arena_t *arena, arena_ru
 			arena_run_page_validate_zeroed(chunk,
 			    run_ind+need_pages-1);
 		}
+		VALGRIND_MAKE_MEM_UNDEFINED((void *)((uintptr_t)chunk +
+		    (run_ind << LG_PAGE)), (need_pages << LG_PAGE));
 	}
-	VALGRIND_MAKE_MEM_UNDEFINED((void *)((uintptr_t)chunk + (run_ind <<
-	    LG_PAGE)), (need_pages << LG_PAGE));
 }
 
 static arena_chunk_t *
@@ -569,17 +582,24 @@ arena_chunk_alloc(arena_t *arena)
 		 * unless the chunk is not zeroed.
 		 */
 		if (zero == false) {
+			VALGRIND_MAKE_MEM_UNDEFINED(
+			    (void *)arena_mapp_get(chunk, map_bias+1),
+			    (size_t)((uintptr_t) arena_mapp_get(chunk,
+			    chunk_npages-1) - (uintptr_t)arena_mapp_get(chunk,
+			    map_bias+1)));
 			for (i = map_bias+1; i < chunk_npages-1; i++)
 				arena_mapbits_unzeroed_set(chunk, i, unzeroed);
-		} else if (config_debug) {
+		} else {
 			VALGRIND_MAKE_MEM_DEFINED(
 			    (void *)arena_mapp_get(chunk, map_bias+1),
-			    (void *)((uintptr_t)
-			    arena_mapp_get(chunk, chunk_npages-1)
-			    - (uintptr_t)arena_mapp_get(chunk, map_bias+1)));
-			for (i = map_bias+1; i < chunk_npages-1; i++) {
-				assert(arena_mapbits_unzeroed_get(chunk, i) ==
-				    unzeroed);
+			    (size_t)((uintptr_t) arena_mapp_get(chunk,
+			    chunk_npages-1) - (uintptr_t)arena_mapp_get(chunk,
+			    map_bias+1)));
+			if (config_debug) {
+				for (i = map_bias+1; i < chunk_npages-1; i++) {
+					assert(arena_mapbits_unzeroed_get(chunk,
+					    i) == unzeroed);
+				}
 			}
 		}
 		arena_mapbits_unallocated_set(chunk, chunk_npages-1,
@@ -1458,6 +1478,7 @@ arena_malloc_small(arena_t *arena, size_
 			} else if (opt_zero)
 				memset(ret, 0, size);
 		}
+		VALGRIND_MAKE_MEM_UNDEFINED(ret, size);
 	} else {
 		if (config_fill && opt_junk) {
 			arena_alloc_junk_small(ret, &arena_bin_info[binind],
@@ -1466,7 +1487,6 @@ arena_malloc_small(arena_t *arena, size_
 		VALGRIND_MAKE_MEM_UNDEFINED(ret, size);
 		memset(ret, 0, size);
 	}
-	VALGRIND_MAKE_MEM_UNDEFINED(ret, size);
 
 	return (ret);
 }

Modified: projects/camlock/contrib/jemalloc/src/chunk.c
==============================================================================
--- projects/camlock/contrib/jemalloc/src/chunk.c	Mon Oct 21 08:57:27 2013	(r256836)
+++ projects/camlock/contrib/jemalloc/src/chunk.c	Mon Oct 21 09:03:30 2013	(r256837)
@@ -294,7 +294,7 @@ label_return:
 	if (xnode != NULL)
 		base_node_dealloc(xnode);
 	if (xprev != NULL)
-		base_node_dealloc(prev);
+		base_node_dealloc(xprev);
 }
 
 void

Modified: projects/camlock/contrib/jemalloc/src/ctl.c
==============================================================================
--- projects/camlock/contrib/jemalloc/src/ctl.c	Mon Oct 21 08:57:27 2013	(r256836)
+++ projects/camlock/contrib/jemalloc/src/ctl.c	Mon Oct 21 09:03:30 2013	(r256837)
@@ -546,43 +546,30 @@ ctl_arena_refresh(arena_t *arena, unsign
 static bool
 ctl_grow(void)
 {
-	size_t astats_size;
 	ctl_arena_stats_t *astats;
 	arena_t **tarenas;
 
-	/* Extend arena stats and arenas arrays. */
-	astats_size = (ctl_stats.narenas + 2) * sizeof(ctl_arena_stats_t);
-	if (ctl_stats.narenas == narenas_auto) {
-		/* ctl_stats.arenas and arenas came from base_alloc(). */
-		astats = (ctl_arena_stats_t *)imalloc(astats_size);
-		if (astats == NULL)
-			return (true);
-		memcpy(astats, ctl_stats.arenas, (ctl_stats.narenas + 1) *
-		    sizeof(ctl_arena_stats_t));
-
-		tarenas = (arena_t **)imalloc((ctl_stats.narenas + 1) *
-		    sizeof(arena_t *));
-		if (tarenas == NULL) {
-			idalloc(astats);
-			return (true);
-		}
-		memcpy(tarenas, arenas, ctl_stats.narenas * sizeof(arena_t *));
-	} else {
-		astats = (ctl_arena_stats_t *)iralloc(ctl_stats.arenas,
-		    astats_size, 0, 0, false, false);
-		if (astats == NULL)
-			return (true);
-
-		tarenas = (arena_t **)iralloc(arenas, (ctl_stats.narenas + 1) *
-		    sizeof(arena_t *), 0, 0, false, false);
-		if (tarenas == NULL)
-			return (true);
+	/* Allocate extended arena stats and arenas arrays. */
+	astats = (ctl_arena_stats_t *)imalloc((ctl_stats.narenas + 2) *
+	    sizeof(ctl_arena_stats_t));
+	if (astats == NULL)
+		return (true);
+	tarenas = (arena_t **)imalloc((ctl_stats.narenas + 1) *
+	    sizeof(arena_t *));
+	if (tarenas == NULL) {
+		idalloc(astats);
+		return (true);
 	}
-	/* Initialize the new astats and arenas elements. */
+
+	/* Initialize the new astats element. */
+	memcpy(astats, ctl_stats.arenas, (ctl_stats.narenas + 1) *
+	    sizeof(ctl_arena_stats_t));
 	memset(&astats[ctl_stats.narenas + 1], 0, sizeof(ctl_arena_stats_t));
-	if (ctl_arena_init(&astats[ctl_stats.narenas + 1]))
+	if (ctl_arena_init(&astats[ctl_stats.narenas + 1])) {
+		idalloc(tarenas);
+		idalloc(astats);
 		return (true);
-	tarenas[ctl_stats.narenas] = NULL;
+	}
 	/* Swap merged stats to their new location. */
 	{
 		ctl_arena_stats_t tstats;
@@ -593,13 +580,34 @@ ctl_grow(void)
 		memcpy(&astats[ctl_stats.narenas + 1], &tstats,
 		    sizeof(ctl_arena_stats_t));
 	}
+	/* Initialize the new arenas element. */
+	tarenas[ctl_stats.narenas] = NULL;
+	{
+		arena_t **arenas_old = arenas;
+		/*
+		 * Swap extended arenas array into place.  Although ctl_mtx
+		 * protects this function from other threads extending the
+		 * array, it does not protect from other threads mutating it
+		 * (i.e. initializing arenas and setting array elements to
+		 * point to them).  Therefore, array copying must happen under
+		 * the protection of arenas_lock.
+		 */
+		malloc_mutex_lock(&arenas_lock);
+		arenas = tarenas;
+		memcpy(arenas, arenas_old, ctl_stats.narenas *
+		    sizeof(arena_t *));
+		narenas_total++;
+		arenas_extend(narenas_total - 1);
+		malloc_mutex_unlock(&arenas_lock);
+		/*
+		 * Deallocate arenas_old only if it came from imalloc() (not
+		 * base_alloc()).
+		 */
+		if (ctl_stats.narenas != narenas_auto)
+			idalloc(arenas_old);
+	}
 	ctl_stats.arenas = astats;
 	ctl_stats.narenas++;
-	malloc_mutex_lock(&arenas_lock);
-	arenas = tarenas;
-	narenas_total++;
-	arenas_extend(narenas_total - 1);
-	malloc_mutex_unlock(&arenas_lock);
 
 	return (false);
 }
@@ -1109,7 +1117,7 @@ epoch_ctl(const size_t *mib, size_t mibl
     void *newp, size_t newlen)
 {
 	int ret;
-	uint64_t newval;
+	UNUSED uint64_t newval;
 
 	malloc_mutex_lock(&ctl_mtx);
 	WRITE(newval, uint64_t);

Modified: projects/camlock/contrib/jemalloc/src/jemalloc.c
==============================================================================
--- projects/camlock/contrib/jemalloc/src/jemalloc.c	Mon Oct 21 08:57:27 2013	(r256836)
+++ projects/camlock/contrib/jemalloc/src/jemalloc.c	Mon Oct 21 09:03:30 2013	(r256837)
@@ -286,7 +286,7 @@ arenas_cleanup(void *arg)
 	malloc_mutex_unlock(&arenas_lock);
 }
 
-static JEMALLOC_ATTR(always_inline) void
+JEMALLOC_ALWAYS_INLINE_C void
 malloc_thread_init(void)
 {
 
@@ -303,7 +303,7 @@ malloc_thread_init(void)
 		quarantine_alloc_hook();
 }
 
-static JEMALLOC_ATTR(always_inline) bool
+JEMALLOC_ALWAYS_INLINE_C bool
 malloc_init(void)
 {
 
@@ -440,8 +440,9 @@ malloc_conf_init(void)
 			}
 			break;
 		case 1: {
+			int linklen = 0;
 #ifndef _WIN32
-			int linklen;
+			int saved_errno = errno;
 			const char *linkname =
 #  ifdef JEMALLOC_PREFIX
 			    "/etc/"JEMALLOC_PREFIX"malloc.conf"
@@ -450,21 +451,20 @@ malloc_conf_init(void)
 #  endif
 			    ;
 
-			if ((linklen = readlink(linkname, buf,
-			    sizeof(buf) - 1)) != -1) {
-				/*
-				 * Use the contents of the "/etc/malloc.conf"
-				 * symbolic link's name.
-				 */
-				buf[linklen] = '\0';
-				opts = buf;
-			} else
-#endif
-			{
+			/*
+			 * Try to use the contents of the "/etc/malloc.conf"
+			 * symbolic link's name.
+			 */
+			linklen = readlink(linkname, buf, sizeof(buf) - 1);
+			if (linklen == -1) {
 				/* No configuration specified. */
-				buf[0] = '\0';
-				opts = buf;
+				linklen = 0;
+				/* restore errno */
+				set_errno(saved_errno);
 			}
+#endif
+			buf[linklen] = '\0';
+			opts = buf;
 			break;
 		} case 2: {
 			const char *envname =
@@ -1407,7 +1407,7 @@ je_mallctlbymib(const size_t *mib, size_
  */
 #ifdef JEMALLOC_EXPERIMENTAL
 
-static JEMALLOC_ATTR(always_inline) void *
+JEMALLOC_ALWAYS_INLINE_C void *
 iallocm(size_t usize, size_t alignment, bool zero, bool try_tcache,
     arena_t *arena)
 {

Modified: projects/camlock/etc/defaults/rc.conf
==============================================================================
--- projects/camlock/etc/defaults/rc.conf	Mon Oct 21 08:57:27 2013	(r256836)
+++ projects/camlock/etc/defaults/rc.conf	Mon Oct 21 09:03:30 2013	(r256837)
@@ -573,6 +573,8 @@ sendmail_enable="NO"	# Run the sendmail 
 sendmail_pidfile="/var/run/sendmail.pid"	# sendmail pid file
 sendmail_procname="/usr/sbin/sendmail"		# sendmail process name
 sendmail_flags="-L sm-mta -bd -q30m" # Flags to sendmail (as a server)
+sendmail_cert_create="YES"	# Create a server certificate if none (YES/NO)
+#sendmail_cert_cn="CN"   	# CN of the generate certificate
 sendmail_submit_enable="YES"	# Start a localhost-only MTA for mail submission
 sendmail_submit_flags="-L sm-mta -bd -q30m -ODaemonPortOptions=Addr=localhost"
 				# Flags for localhost-only MTA
@@ -619,6 +621,9 @@ quotacheck_flags="-a"	# Check all file s
 accounting_enable="NO"	# Turn on process accounting (or NO).
 ibcs2_enable="NO"	# Ibcs2 (SCO) emulation loaded at startup (or NO).
 ibcs2_loaders="coff"	# List of additional Ibcs2 loaders (or NO).
+firstboot_sentinel="/firstboot"	# Scripts with "firstboot" keyword are run if
+			# this file exists.  Should be on a R/W filesystem so
+			# the file can be deleted after the boot completes.
 
 # Emulation/compatibility services provided by /etc/rc.d/abi
 sysvipc_enable="NO"	# Load System V IPC primitives at startup (or NO).

Modified: projects/camlock/etc/mtree/BSD.usr.dist
==============================================================================
--- projects/camlock/etc/mtree/BSD.usr.dist	Mon Oct 21 08:57:27 2013	(r256836)
+++ projects/camlock/etc/mtree/BSD.usr.dist	Mon Oct 21 09:03:30 2013	(r256837)
@@ -169,12 +169,6 @@
             ..
             atm
             ..
-            bind9
-                arm
-                ..
-                misc
-                ..
-            ..
             legal
                 intel_ipw
                 ..

Modified: projects/camlock/etc/rc
==============================================================================
--- projects/camlock/etc/rc	Mon Oct 21 08:57:27 2013	(r256836)
+++ projects/camlock/etc/rc	Mon Oct 21 09:03:30 2013	(r256837)
@@ -82,10 +82,15 @@ if [ `/sbin/sysctl -n security.jail.jail
 	fi
 fi
 
+# If the firstboot sentinel doesn't exist, we want to skip firstboot scripts.
+if ! [ -e ${firstboot_sentinel} ]; then
+	skip_firstboot="-s firstboot"
+fi
+
 # Do a first pass to get everything up to $early_late_divider so that
 # we can do a second pass that includes $local_startup directories
 #
-files=`rcorder ${skip} /etc/rc.d/* 2>/dev/null`
+files=`rcorder ${skip} ${skip_firstboot} /etc/rc.d/* 2>/dev/null`
 
 _rc_elem_done=' '
 for _rc_elem in ${files}; do
@@ -107,7 +112,13 @@ case ${local_startup} in
 *)	find_local_scripts_new ;;
 esac
 
-files=`rcorder ${skip} /etc/rc.d/* ${local_rc} 2>/dev/null`
+# The firstboot sentinel might be on a newly mounted filesystem; look for it
+# again and unset skip_firstboot if we find it.
+if [ -e ${firstboot_sentinel} ]; then
+	skip_firstboot=""
+fi
+
+files=`rcorder ${skip} ${skip_firstboot} /etc/rc.d/* ${local_rc} 2>/dev/null`
 for _rc_elem in ${files}; do
 	case "$_rc_elem_done" in
 	*" $_rc_elem "*)	continue ;;
@@ -116,6 +127,15 @@ for _rc_elem in ${files}; do
 	run_rc_script ${_rc_elem} ${_boot}
 done
 
+# Remove the firstboot sentinel, and reboot if it was requested.
+if [ -e ${firstboot_sentinel} ]; then
+	rm ${firstboot_sentinel}
+	if [ -e ${firstboot_sentinel}-reboot ]; then
+		rm ${firstboot_sentinel}-reboot
+		kill -INT 1
+	fi
+fi
+
 echo ''
 date
 exit 0

Modified: projects/camlock/etc/rc.d/jail
==============================================================================
--- projects/camlock/etc/rc.d/jail	Mon Oct 21 08:57:27 2013	(r256836)
+++ projects/camlock/etc/rc.d/jail	Mon Oct 21 09:03:30 2013	(r256837)
@@ -132,7 +132,9 @@ parse_options()
 	#
 	_confwarn=1
 	if [ -r "$jail_conf" -o -r "$_jconf" ]; then
-		warn "$_conf is created and used for jail $_j."
+		if ! checkyesno jail_parallel_start; then
+			warn "$_conf is created and used for jail $_j."
+		fi
 	fi
 	/usr/bin/install -m 0644 -o root -g wheel /dev/null $_conf || return 1
 
@@ -367,10 +369,10 @@ jail_handle_ips_option()
 		# Append address to list of addresses for the jail command.
 		case $_type in
 		inet)
-			echo "	ip4.addr += \"${_iface}|${_addr}${_mask}\";"
+			echo "	ip4.addr += \"${_iface:+${_iface}|}${_addr}${_mask}\";"
 		;;
 		inet6)
-			echo "	ip6.addr += \"${_iface}|${_addr}${_mask}\";"
+			echo "	ip6.addr += \"${_iface:+${_iface}|}${_addr}${_mask}\";"
 			need_dad_wait=1
 		;;
 		esac
@@ -418,7 +420,7 @@ jail_status()
 
 jail_start()
 {
-	local _j _jid _jn
+	local _j _jid _jn _jl
 
 	if [ $# = 0 ]; then
 		return
@@ -426,47 +428,82 @@ jail_start()
 	echo -n 'Starting jails:'
 	case $1 in
 	_ALL)
-		echo -n ' '
 		command=$jail_program
 		rc_flags=$jail_flags
 		command_args="-f $jail_conf -c"
-		$jail_jls -nq | while read IN; do
-			_jn=$(echo $IN | tr " " "\n" | grep name=)
-			_jid=$(echo $IN | tr " " "\n" | grep jid=)
-			if $command $rc_flags $command_args ${_jn#name=}; then
+		_tmp=`mktemp -t jail` || exit 3
+		if $command $rc_flags $command_args >> $_tmp 2>&1; then
+			$jail_jls -nq | while read IN; do
+				_jn=$(echo $IN | tr " " "\n" | grep ^name=)
+				_jid=$(echo $IN | tr " " "\n" | grep ^jid=)
 				echo -n " ${_jn#name=}"
 				echo "${_jid#jid=}" \
 				    > /var/run/jail_${_jn#name=}.id
-			fi
-		done
+			done
+		else
+			tail -1 $_tmp
+		fi
+		rm -f $_tmp
 		echo '.'
 		return
 	;;
 	esac
-	_tmp=`mktemp -t jail` || exit 3
-	for _j in $@; do
-		_j=$(echo $_j | tr /. _)
-		parse_options $_j || continue
-
-		eval rc_flags=\${jail_${_j}_flags:-$jail_flags}
-		eval command=\${jail_${_j}_program:-$jail_program}
-		if checkyesno jail_parallel_start; then
-			command_args="-i -f $_conf -c $_j &"
-		else
+	if checkyesno jail_parallel_start; then
+		#
+		# Start jails in parallel and then check jail id when
+		# jail_parallel_start is YES.
+		#
+		_jl=
+		for _j in $@; do
+			_j=$(echo $_j | tr /. _)
+			parse_options $_j || continue
+
+			_jl="$_jl $_j"
+			eval rc_flags=\${jail_${_j}_flags:-$jail_flags}
+			eval command=\${jail_${_j}_program:-$jail_program}
 			command_args="-i -f $_conf -c $_j"
-		fi
-		if $command $rc_flags $command_args \
-		    >> $_tmp 2>&1 </dev/null; then
+			$command $rc_flags $command_args \
+			    >/dev/null 2>&1 </dev/null &
+		done
+		sleep 1
+		for _j in $_jl; do
 			echo -n " ${_hostname:-${_j}}"
-			_jid=$($jail_jls -n -j $_j | tr " " "\n" | grep jid=)
-			echo "${_jid#jid=}" > /var/run/jail_${_j}.id
-		else
-			rm -f /var/run/jail_${_j}.id
-			echo " cannot start jail \"${_hostname:-${_j}}\": "
-			cat $_tmp
-		fi
-		rm -f $_tmp
-	done
+			if _jid=$($jail_jls -n -j $_j | tr " " "\n" | \
+			    grep ^jid=); then
+				echo "${_jid#jid=}" > /var/run/jail_${_j}.id
+			else
+				rm -f /var/run/jail_${_j}.id
+				echo " cannot start jail " \
+				    "\"${_hostname:-${_j}}\": "
+			fi
+		done
+	else
+		#
+		# Start jails one-by-one when jail_parallel_start is NO.
+		#
+		for _j in $@; do
+			_j=$(echo $_j | tr /. _)
+			parse_options $_j || continue
+
+			eval rc_flags=\${jail_${_j}_flags:-$jail_flags}
+			eval command=\${jail_${_j}_program:-$jail_program}
+			command_args="-i -f $_conf -c $_j"
+			_tmp=`mktemp -t jail` || exit 3
+			if $command $rc_flags $command_args \
+			    >> $_tmp 2>&1 </dev/null; then
+				echo -n " ${_hostname:-${_j}}"
+				_jid=$($jail_jls -n -j $_j | \
+				    tr " " "\n" | grep ^jid=)
+				echo "${_jid#jid=}" > /var/run/jail_${_j}.id
+			else
+				rm -f /var/run/jail_${_j}.id
+				echo " cannot start jail " \
+				    "\"${_hostname:-${_j}}\": "
+				cat $_tmp
+			fi
+			rm -f $_tmp
+		done
+	fi
 	echo '.'
 }
 
@@ -480,17 +517,21 @@ jail_stop()
 	echo -n 'Stopping jails:'
 	case $1 in
 	_ALL)
-		echo -n ' '
 		command=$jail_program
 		rc_flags=$jail_flags
 		command_args="-f $jail_conf -r"
 		$jail_jls -nq | while read IN; do
-			_jn=$(echo $IN | tr " " "\n" | grep name=)
+			_jn=$(echo $IN | tr " " "\n" | grep ^name=)
 			echo -n " ${_jn#name=}"
-			$command $rc_flags $command_args ${_jn#name=}
-			if ! $jail_jls -j ${_jn#name=} > /dev/null 2>&1; then
+			_tmp=`mktemp -t jail` || exit 3
+			$command $rc_flags $command_args ${_jn#name=} \
+			    >> $_tmp 2>&1
+			if $jail_jls -j ${_jn#name=} > /dev/null 2>&1; then
+				tail -1 $_tmp
+			else
 				rm -f /var/run/jail_${_jn#name=}.id
 			fi
+			rm -f $_tmp
 		done
 		echo '.'
 		return
@@ -504,10 +545,14 @@ jail_stop()
 		fi
 		eval command=\${jail_${_j}_program:-$jail_program}
 		echo -n " ${_hostname:-${_j}}"
-		$command -q -f $_conf -r $_j
-		if ! $jail_jls -j $_j > /dev/null 2>&1; then
+		_tmp=`mktemp -t jail` || exit 3
+		$command -q -f $_conf -r $_j >> $_tmp 2>&1
+		if $jail_jls -j $_j > /dev/null 2>&1; then

*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***


More information about the svn-src-projects mailing list