]> git.saurik.com Git - redis.git/log
redis.git
12 years agoProperly wait the slave to sync with master in BRPOPLPUSH test.
antirez [Mon, 30 Apr 2012 08:55:03 +0000 (10:55 +0200)] 
Properly wait the slave to sync with master in BRPOPLPUSH test.

12 years agoA more lightweight implementation of issue 141 regression test.
antirez [Sat, 28 Apr 2012 13:39:00 +0000 (15:39 +0200)] 
A more lightweight implementation of issue 141 regression test.

12 years agoAdded "read-only slaves" in new features section of 2.6 release notes.
antirez [Fri, 27 Apr 2012 21:06:02 +0000 (23:06 +0200)] 
Added "read-only slaves" in new features section of 2.6 release notes.

12 years agoyet another typo fixed in release notes.
antirez [Fri, 27 Apr 2012 15:04:03 +0000 (17:04 +0200)] 
yet another typo fixed in release notes.

12 years agoFixed release notes typo
antirez [Fri, 27 Apr 2012 15:01:44 +0000 (17:01 +0200)] 
Fixed release notes typo

12 years agoRedis 2.5.7 (2.6 RC1)
antirez [Fri, 27 Apr 2012 14:40:07 +0000 (16:40 +0200)] 
Redis 2.5.7 (2.6 RC1)

12 years agomemtest.c fixed to actually use v1 and v2 in memtest_fill_value().
antirez [Fri, 27 Apr 2012 14:28:31 +0000 (16:28 +0200)] 
memtest.c fixed to actually use v1 and v2 in memtest_fill_value().

12 years agoRelease notes updated with the new 2.6 features.
antirez [Fri, 27 Apr 2012 14:07:42 +0000 (16:07 +0200)] 
Release notes updated with the new 2.6 features.

12 years agoredis-cli commands description in help.h updated.
antirez [Fri, 27 Apr 2012 13:57:17 +0000 (15:57 +0200)] 
redis-cli commands description in help.h updated.

12 years agoUpdate makefile dependencies.
antirez [Fri, 27 Apr 2012 13:56:16 +0000 (15:56 +0200)] 
Update makefile dependencies.

12 years agoSet LUA_MASKCOUNT hook more selectively. Fixes issue #480.
antirez [Fri, 27 Apr 2012 09:41:25 +0000 (11:41 +0200)] 
Set LUA_MASKCOUNT hook more selectively. Fixes issue #480.

An user reported a crash with Redis scripting (see issue #480 on
github), inspection of the kindly provided strack trace showed that
server.lua_caller was probably set to NULL. The stack trace also slowed
that the call to the hook was originating from a point where we just
used to set/get a few global variables in the Lua state.

What was happening is that we did not set the timeout hook selectively
only when the user script was called. Now we set it more selectively,
specifically only in the context of the lua_pcall() call, and make sure
to remove the hook when the call returns. Otherwise the hook can get
called in random contexts every time we do something with the Lua
state.

12 years agoRe-introduce -g -rdynamic -ggdb when linking, fixing strack traces.
antirez [Thu, 26 Apr 2012 14:53:11 +0000 (16:53 +0200)] 
Re-introduce -g -rdynamic -ggdb when linking, fixing strack traces.

A previous commit removed -g -rdynamic -ggdb as LDFLAGS, not allowing
Redis to produce a stack trace wth symbol names on crash.
This commit fixes the issue.

12 years agoProduce the stack trace in an async safe way.
antirez [Thu, 26 Apr 2012 14:04:53 +0000 (16:04 +0200)] 
Produce the stack trace in an async safe way.

12 years agoDon't use an alternative stack for SIGSEGV & co.
antirez [Thu, 26 Apr 2012 14:21:19 +0000 (16:21 +0200)] 
Don't use an alternative stack for SIGSEGV & co.

This commit reverts most of c575766202773c858be0870c20cd495b722927c3, in
order to use back main stack for signal handling.

The main reason is that otherwise it is completely pointless that we do
a lot of efforts to print the stack trace on crash, and the content of
the stack and registers as well. Using an alternate stack broken this
feature completely.

12 years agoRedis test: More reliable BRPOPLPUSH replication test.
antirez [Thu, 26 Apr 2012 09:25:13 +0000 (11:25 +0200)] 
Redis test: More reliable BRPOPLPUSH replication test.

Now it uses the new wait_for_condition testing primitive.
Also wait_for_condition implementation was fixed in this commit to properly
escape the expr command and its argument.

12 years agoRedis test: scripting EVALSHA replication test more reliable.
antirez [Thu, 26 Apr 2012 09:16:52 +0000 (11:16 +0200)] 
Redis test: scripting EVALSHA replication test more reliable.

A new primitive wait_for_condition was introduced in the scripting
engine that makes waiting for events simpler, so that it is simpler to
write tests that are more resistant to timing issues.

12 years agoSpelling: s/synchrnonization/synchronization
David Tran [Wed, 25 Apr 2012 19:21:56 +0000 (12:21 -0700)] 
Spelling: s/synchrnonization/synchronization

12 years agoExplicitly use bash for install_server.sh. Fixes issue #397
antirez [Tue, 24 Apr 2012 17:14:03 +0000 (19:14 +0200)] 
Explicitly use bash for install_server.sh. Fixes issue #397

12 years agoredis-check-dump now is RDB version 6 ready.
antirez [Tue, 24 Apr 2012 17:05:27 +0000 (19:05 +0200)] 
redis-check-dump now is RDB version 6 ready.

12 years agoSpurious debugging printf removed.
antirez [Tue, 24 Apr 2012 15:15:21 +0000 (17:15 +0200)] 
Spurious debugging printf removed.

12 years agoAdded two new encodings to ziplist.c
antirez [Tue, 24 Apr 2012 14:54:07 +0000 (16:54 +0200)] 
Added two new encodings to ziplist.c

1) One integer "immediate" encoding that can encode from 0 to 12 in the
encoding byte itself.
2) One 8 bit signed integer encoding that can encode 8 bit signed small
integers in a single byte.

The idea is to exploit all the not used bits we have around in a
backward compatible way.

12 years agordbLoad() should check REDIS_RDB_VERSION instead of hardcoded number.
antirez [Tue, 24 Apr 2012 10:53:30 +0000 (12:53 +0200)] 
rdbLoad() should check REDIS_RDB_VERSION instead of hardcoded number.

12 years agoziplist.c: added comments about the new 24 bit encoding.
antirez [Tue, 24 Apr 2012 10:51:59 +0000 (12:51 +0200)] 
ziplist.c: added comments about the new 24 bit encoding.

12 years agoAdd a 24bit integer to ziplists to save one byte for ints that can
Grisha Trubetskoy [Fri, 20 Apr 2012 14:38:42 +0000 (10:38 -0400)] 
Add a 24bit integer to ziplists to save one byte for ints that can
fit in 24 bits (thanks to antirez for catching and solving the two's compliment
bug).

Increment REDIS_RDB_VERSION to 6

12 years agoA few compiler warnings suppressed.
antirez [Tue, 24 Apr 2012 09:11:55 +0000 (11:11 +0200)] 
A few compiler warnings suppressed.

12 years agoFix and refactoring of code used to get registers on crash.
antirez [Tue, 24 Apr 2012 09:07:15 +0000 (11:07 +0200)] 
Fix and refactoring of code used to get registers on crash.

This fixes compilation on FreeBSD (and possibly other systems) by
not using ucontext_t at all if HAVE_BACKTRACE is not defined.
Also the ifdefs to get the registers are modified to explicitly test for the
operating system in the first level, and the arch in the second level
of nesting.

12 years agoZiplist encoding now tested with negative integers as well.
antirez [Mon, 23 Apr 2012 15:27:39 +0000 (17:27 +0200)] 
Ziplist encoding now tested with negative integers as well.

12 years agoNew time limit for protocol desync test set to 30 seconds to reduce false positives.
antirez [Mon, 23 Apr 2012 08:57:43 +0000 (10:57 +0200)] 
New time limit for protocol desync test set to 30 seconds to reduce false positives.

12 years agoRemove loadfile() access from the scripting engine.
antirez [Mon, 23 Apr 2012 08:43:24 +0000 (10:43 +0200)] 
Remove loadfile() access from the scripting engine.

12 years agoReplace unnecessary calls to echo and cat
Michael Schlenker [Tue, 17 Apr 2012 20:20:54 +0000 (22:20 +0200)] 
Replace unnecessary calls to echo and cat

Tcl's exec can send data to stdout itself, no need to call cat/echo for
that usually.

12 years agoEven inside #if 0 comments are comments.
antirez [Sat, 21 Apr 2012 19:49:21 +0000 (21:49 +0200)] 
Even inside #if 0 comments are comments.

12 years agoLimit memory used by big SLOWLOG entries.
antirez [Sat, 21 Apr 2012 17:20:03 +0000 (19:20 +0200)] 
Limit memory used by big SLOWLOG entries.

Two limits are added:

1) Up to SLOWLOG_ENTRY_MAX_ARGV arguments are logged.
2) Up to SLOWLOG_ENTRY_MAX_STRING bytes per argument are logged.
3) slowlog-max-len is set to 128 by default (was 1024).

The number of remaining arguments / bytes is logged in the entry
so that the user can understand better the nature of the logged command.

12 years agoredis.conf AOF section comments improved.
antirez [Thu, 19 Apr 2012 22:04:07 +0000 (00:04 +0200)] 
redis.conf AOF section comments improved.

12 years agoREADME now makes clear that our support for solaris derived systems is "best effort".
antirez [Sat, 21 Apr 2012 10:08:26 +0000 (12:08 +0200)] 
README now makes clear that our support for solaris derived systems is "best effort".

12 years agoNew tests related to scripts max execution time.
antirez [Thu, 19 Apr 2012 21:49:33 +0000 (23:49 +0200)] 
New tests related to scripts max execution time.

12 years agoSHUTDOWN NOSAVE now can stop a non returning script. Issue #466.
antirez [Thu, 19 Apr 2012 21:35:15 +0000 (23:35 +0200)] 
SHUTDOWN NOSAVE now can stop a non returning script. Issue #466.

12 years agoCurrenly not used code in dict.c commented out.
antirez [Wed, 18 Apr 2012 21:56:07 +0000 (23:56 +0200)] 
Currenly not used code in dict.c commented out.

12 years agoTests for scripting PRNG.
antirez [Wed, 18 Apr 2012 21:50:16 +0000 (23:50 +0200)] 
Tests for scripting PRNG.

12 years agocr16.c removed from 2.6 branch, was not used.
antirez [Wed, 18 Apr 2012 21:41:00 +0000 (23:41 +0200)] 
cr16.c removed from 2.6 branch, was not used.

12 years agoredis-cli --bigkeys output modified to be simpler to read..
antirez [Wed, 18 Apr 2012 18:53:37 +0000 (20:53 +0200)] 
redis-cli --bigkeys output modified to be simpler to read..

12 years agoredis-cli --bigkeys
antirez [Wed, 18 Apr 2012 18:33:02 +0000 (20:33 +0200)] 
redis-cli --bigkeys

12 years agoTest SDIFF with first set empty.
antirez [Wed, 18 Apr 2012 16:13:31 +0000 (18:13 +0200)] 
Test SDIFF with first set empty.

12 years agoTest SINTER against same integer elements, but different set encoding.
antirez [Wed, 18 Apr 2012 16:10:48 +0000 (18:10 +0200)] 
Test SINTER against same integer elements, but different set encoding.

12 years agoTest SINTER with non existing key.
antirez [Wed, 18 Apr 2012 16:05:02 +0000 (18:05 +0200)] 
Test SINTER with non existing key.

12 years agoAdded an SMOVE test where src and dest key are the same.
antirez [Wed, 18 Apr 2012 16:00:12 +0000 (18:00 +0200)] 
Added an SMOVE test where src and dest key are the same.

12 years agoNew hash fuzzing test.
antirez [Wed, 18 Apr 2012 15:56:17 +0000 (17:56 +0200)] 
New hash fuzzing test.

12 years agoDocument mostly dead code in RPOPLPUSH implementation.
antirez [Wed, 18 Apr 2012 15:38:02 +0000 (17:38 +0200)] 
Document mostly dead code in RPOPLPUSH implementation.

12 years agoExplicit RPOP/LPOP tests.
antirez [Wed, 18 Apr 2012 15:32:48 +0000 (17:32 +0200)] 
Explicit RPOP/LPOP tests.

12 years agoTest LINSERT syntax error.
antirez [Wed, 18 Apr 2012 15:22:14 +0000 (17:22 +0200)] 
Test LINSERT syntax error.

12 years agoTest LINDEX out of range index.
antirez [Wed, 18 Apr 2012 15:17:53 +0000 (17:17 +0200)] 
Test LINDEX out of range index.

12 years agoMerge pull request #455 from pietern/2.6-mkopts
Salvatore Sanfilippo [Wed, 18 Apr 2012 14:26:36 +0000 (07:26 -0700)] 
Merge pull request #455 from pietern/2.6-mkopts

Persist Makefile flags (2.6)

12 years agoMarginally cleaner lookupKeyByPattern() implementation.
antirez [Wed, 18 Apr 2012 09:37:14 +0000 (11:37 +0200)] 
Marginally cleaner lookupKeyByPattern() implementation.

just fieldobj itself as sentinel of the fact a field object is used or
not, instead of using the filed length, that may be confusing both for
people and for the compiler emitting a warning.

12 years agoMore robust maxclients test.
antirez [Wed, 18 Apr 2012 09:34:18 +0000 (11:34 +0200)] 
More robust maxclients test.

12 years agoTwo small fixes to maxclients handling.
antirez [Wed, 18 Apr 2012 09:31:24 +0000 (11:31 +0200)] 
Two small fixes to maxclients handling.

1) Don't accept maxclients set to < 0
2) Allow maxclients < 1024, it is useful for testing.

12 years agoAdded test for SORT corner case: pattern ending with just "->".
antirez [Tue, 17 Apr 2012 14:28:50 +0000 (16:28 +0200)] 
Added test for SORT corner case: pattern ending with just "->".

12 years agolookupKeyByPattern() used by SORT GET/BY rewritten. Fixes issue #460.
antirez [Tue, 17 Apr 2012 11:05:09 +0000 (13:05 +0200)] 
lookupKeyByPattern() used by SORT GET/BY rewritten. Fixes issue #460.

lookupKeyByPattern() was implemented with a trick to speedup the lookup
process allocating two fake Redis obejcts on the stack. However now that
we propagate expires to the slave as DEL operations the lookup of the
key may result into a call to expireIfNeeded() having the stack
allocated object as argument, that may in turn use it to create the
protocol to send to the slave. But since this fake obejcts are
inherently read-only this is a problem.

As a side effect of this fix there are no longer size limits in the
pattern to be used with GET/BY option of SORT.

See https://github.com/antirez/redis/issues/460 for bug details.

12 years agoLess false positives in maxclients test, hopefully.
antirez [Tue, 17 Apr 2012 08:04:42 +0000 (10:04 +0200)] 
Less false positives in maxclients test, hopefully.

12 years agoPersist `make` settings and trigger rebuild if anything changes
Pieter Noordhuis [Sat, 14 Apr 2012 00:50:38 +0000 (17:50 -0700)] 
Persist `make` settings and trigger rebuild if anything changes

12 years agoDon't set flags recursively
Pieter Noordhuis [Sat, 14 Apr 2012 00:46:28 +0000 (17:46 -0700)] 
Don't set flags recursively

12 years agoRemove unused LIBS variable
Pieter Noordhuis [Sat, 14 Apr 2012 00:44:34 +0000 (17:44 -0700)] 
Remove unused LIBS variable

12 years agoFirst set defaults, then do composition
Pieter Noordhuis [Sat, 14 Apr 2012 00:43:06 +0000 (17:43 -0700)] 
First set defaults, then do composition

12 years agoQuestion mark assignment is not needed
Pieter Noordhuis [Sat, 14 Apr 2012 00:41:40 +0000 (17:41 -0700)] 
Question mark assignment is not needed

12 years agoIgnore gcov/lcov artifacts
Pieter Noordhuis [Sat, 14 Apr 2012 00:38:29 +0000 (17:38 -0700)] 
Ignore gcov/lcov artifacts

12 years agoThe lcov target shouldn't clean
Pieter Noordhuis [Sat, 14 Apr 2012 00:38:12 +0000 (17:38 -0700)] 
The lcov target shouldn't clean

This is not needed because every change in compiler/linker flags
triggers a cleanup.

12 years agoRename ADD_*FLAGS -> REDIS_*FLAGS, REDIS_*FLAGS -> FINAL_*FLAGS
Pieter Noordhuis [Sat, 14 Apr 2012 00:34:31 +0000 (17:34 -0700)] 
Rename ADD_*FLAGS -> REDIS_*FLAGS, REDIS_*FLAGS -> FINAL_*FLAGS

This reflects that REDIS_*FLAGS will only be used for compilation of
Redis and not for its dependencies. Similarly, that FINAL_*FLAGS are
composed of other variables and holds the options that are finally
passed to the compiler and linker.

12 years agoNew test for scripting engine: DECR_IF_GT.
antirez [Fri, 13 Apr 2012 13:23:32 +0000 (15:23 +0200)] 
New test for scripting engine: DECR_IF_GT.

12 years agoEVAL errors are more clear now.
antirez [Fri, 13 Apr 2012 13:12:16 +0000 (15:12 +0200)] 
EVAL errors are more clear now.

12 years agoUse Lua tostring() before concatenation.
antirez [Fri, 13 Apr 2012 12:54:49 +0000 (14:54 +0200)] 
Use Lua tostring() before concatenation.

12 years agoTests modified to match the new global protection implementation.
antirez [Fri, 13 Apr 2012 11:40:57 +0000 (13:40 +0200)] 
Tests modified to match the new global protection implementation.

12 years agomt.declared is no longer needed.
antirez [Fri, 13 Apr 2012 11:36:08 +0000 (13:36 +0200)] 
mt.declared is no longer needed.

Lua global protection can now be simpified becuase we no longer have the
global() function. It's useless to occupy memory with this table, it is
also not faster because the metamethods we use are only called when a
global object does not exist or we are trying to create it from a
script.

12 years agoStop access to global vars. Not configurable.
antirez [Fri, 13 Apr 2012 11:26:59 +0000 (13:26 +0200)] 
Stop access to global vars. Not configurable.

After considering the interaction between ability to delcare globals in
scripts using the 'global' function, and the complexities related to
hanlding replication and AOF in a sane way with globals AND ability to
turn protection On and Off, we reconsidered the design. The new design
makes clear that there is only one good way to write Redis scripts, that
is not using globals. In the rare cases state must be retained across
calls a Redis key can be used.

12 years agoGlobals protection global() function modified for speed and correctness.
antirez [Fri, 13 Apr 2012 10:13:02 +0000 (12:13 +0200)] 
Globals protection global() function modified for speed and correctness.

12 years agoTests for lua globals protection.
antirez [Fri, 13 Apr 2012 09:48:45 +0000 (11:48 +0200)] 
Tests for lua globals protection.

12 years agoScripting: globals protection can now be switched on/off.
antirez [Fri, 13 Apr 2012 09:16:50 +0000 (11:16 +0200)] 
Scripting: globals protection can now be switched on/off.

12 years agoProtect globals access in Lua scripting.
antirez [Thu, 29 Mar 2012 10:02:28 +0000 (12:02 +0200)] 
Protect globals access in Lua scripting.

12 years agoA few var names fixed in Makefile.
antirez [Fri, 13 Apr 2012 14:13:56 +0000 (16:13 +0200)] 
A few var names fixed in Makefile.

I modified it for error in a previous commit doing search & replace.

12 years agoPrint arch bits with redis-server -v
antirez [Thu, 12 Apr 2012 09:50:18 +0000 (11:50 +0200)] 
Print arch bits with redis-server -v

12 years agomemtest.c: integer overflow fixed.
antirez [Thu, 12 Apr 2012 09:49:52 +0000 (11:49 +0200)] 
memtest.c: integer overflow fixed.

12 years agoMake gcov fixed.
antirez [Thu, 12 Apr 2012 09:51:58 +0000 (11:51 +0200)] 
Make gcov fixed.

12 years agoMakefile now introduces Redis-specific CFLAGS / LDFLAGS. Gcov target fixed. Added...
antirez [Thu, 12 Apr 2012 09:09:38 +0000 (11:09 +0200)] 
Makefile now introduces Redis-specific CFLAGS / LDFLAGS. Gcov target fixed. Added comments to describe how it works.

12 years agoadded explanation for the magic 511 backlog number
Erik Dubbelboer [Wed, 11 Apr 2012 15:04:31 +0000 (17:04 +0200)] 
added explanation for the magic 511 backlog number

12 years agoMakefile.dep updated.
antirez [Wed, 11 Apr 2012 10:12:30 +0000 (12:12 +0200)] 
Makefile.dep updated.

12 years agomake dep: redirect output to Makefile.dep.
antirez [Wed, 11 Apr 2012 10:12:05 +0000 (12:12 +0200)] 
make dep: redirect output to Makefile.dep.

12 years agoMake inline functions rioRead/Write/Tell static. This fixes issue #447.
antirez [Wed, 11 Apr 2012 09:58:32 +0000 (11:58 +0200)] 
Make inline functions rioRead/Write/Tell static. This fixes issue #447.

12 years agoMacros ULONG_ONEZERO / ULONG_ZEROONE were inverted in #ifdef to test 32/64 bit arch.
antirez [Wed, 11 Apr 2012 09:32:22 +0000 (11:32 +0200)] 
Macros ULONG_ONEZERO / ULONG_ZEROONE were inverted in #ifdef to test 32/64 bit arch.

12 years agoClean up Makefiles
Pieter Noordhuis [Sun, 25 Mar 2012 02:25:03 +0000 (19:25 -0700)] 
Clean up Makefiles

Remove unused variables. Instead of overriding non-standard variables
such as ARCH and PROF, use standard variables CFLAGS and LDFLAGS to
override Makefile settings. Move dependencies generated by `make dep` to
a separate file.

12 years agoEverything x86 is little endian
Pieter Noordhuis [Sun, 25 Mar 2012 02:33:08 +0000 (19:33 -0700)] 
Everything x86 is little endian

12 years agoMinor MIGRATE implementation simplification about ttl handling.
antirez [Tue, 10 Apr 2012 14:46:29 +0000 (16:46 +0200)] 
Minor MIGRATE implementation simplification about ttl handling.

12 years agoCheck write(2) return value to avoid warnings, because in this context failing write...
antirez [Tue, 10 Apr 2012 14:48:28 +0000 (16:48 +0200)] 
Check write(2) return value to avoid warnings, because in this context failing write is not critical.

12 years agoVersion 2.5.6.
antirez [Tue, 10 Apr 2012 14:34:51 +0000 (16:34 +0200)] 
Version 2.5.6.

12 years agoTest for maxclients.
antirez [Sun, 8 Apr 2012 09:16:40 +0000 (11:16 +0200)] 
Test for maxclients.

12 years agodump/restore fixed to use the new crc64 API.
antirez [Mon, 9 Apr 2012 10:33:57 +0000 (12:33 +0200)] 
dump/restore fixed to use the new crc64 API.

12 years agoIt is now possible to enable/disable RDB checksum computation from redis.conf or...
antirez [Tue, 10 Apr 2012 13:47:10 +0000 (15:47 +0200)] 
It is now possible to enable/disable RDB checksum computation from redis.conf or via CONFIG SET/GET. Also CONFIG SET support added for rdbcompression as well.

12 years agoRDB files now embed a crc64 checksum. Version of RDB bumped to 5.
antirez [Mon, 9 Apr 2012 20:40:41 +0000 (22:40 +0200)] 
RDB files now embed a crc64 checksum. Version of RDB bumped to 5.

12 years agoFixed compilation of new rio.c changes (typos and so forth.)
antirez [Mon, 9 Apr 2012 10:36:44 +0000 (12:36 +0200)] 
Fixed compilation of new rio.c changes (typos and so forth.)

12 years agoAdd checksum computation to rio.c
antirez [Mon, 9 Apr 2012 10:33:09 +0000 (12:33 +0200)] 
Add checksum computation to rio.c

12 years agocrc64.c modified for incremental computation.
antirez [Mon, 9 Apr 2012 10:20:47 +0000 (12:20 +0200)] 
crc64.c modified for incremental computation.

12 years agorio.c file somewhat documented so that the casual reader can understand what's going...
antirez [Mon, 9 Apr 2012 09:11:00 +0000 (11:11 +0200)] 
rio.c file somewhat documented so that the casual reader can understand what's going on without reading the code.

12 years agoAdded new test to check that "CONFIG appendonly no" actually kills the background...
antirez [Sat, 7 Apr 2012 11:22:04 +0000 (13:22 +0200)] 
Added new test to check that "CONFIG appendonly no" actually kills the background AOF operation in progress if any.

12 years agoFor coverage testing use exit() instead of _exit() when termiating saving children.
antirez [Sat, 7 Apr 2012 10:11:23 +0000 (12:11 +0200)] 
For coverage testing use exit() instead of _exit() when termiating saving children.