LDMud 3.3 (development)
This is the bleeding edge development version of LDMud. It serves as an
environment to implement experimental features, thorough changes to the
code base and generally code dangerously. Obviously this is not the driver
you want to run a production mud on - for that you'd be better of
with the Release or the
Current version of the driver.
Everybody else, have fun!
- About 3.3.715 (changelog)
- New efun
tls_refresh_certs() to reload the certificates
and certificate revocation information.
- New commandline options to handle certification revocations:
--tls-crlfile pathname and
--tls-crldirectory pathname.
- About 3.3.714
- Implemented the array/mapping intersection.
- Modified a case of undefined behaviour in the creation
of the character classification tables during the build. This undefined
behavior caused problems with newer GCC versions.
- If the driver runs low on memory, it also prints the
current object and program in the low-on-memory message.
- New efuns hash() and hmac() offer flexible hash and HMAC
calculation if the driver is compiled to use OpenSSL (provided by
Philipp).
- New macros __OPENSSL__ and __GNUTLS__ are set depending on
which TLS package is being used.
- Corrected a bug with extremely long object names
(Bug #466).
- Added support for GEN_EMAIL, GEN_URI and GEN_DNS
certificates. tls_verify_callback() now prints diagnostics
only if the '-d' option was given (thanks, Philipp).
- lfun closures now
keep track to which program they belong, to avoid ambiguities
in case of complex inheritance relationships. This also affects
the savefile format: lfun closures are saved with their inheritance
path
(Bug #443,
#444).
- If a non-virtual baseclass was inherited multiple times
with a virtual class inside the inheritance tree, its members
were merged even though they shouldn't
(Bug #422).
- About 3.3.713
- Master function
disconnect() receives the remaining input
data is passed as the second argument (suggested by Philipp).
- The TLS implementation is more robust.
- A missing return is noted at runtime only once per
function. This is achieved by runtime code modification, but we
do that for switch() as well
(Bug #430).
- Added support for: International Domain Names, SQLite
(Bug #431).
- Virtual blueprint objects are guaranteed to have their
'clone' flag unset.
- Removed the stipulation that CATCH_RESERVED_COST
must be twice as much as MASTER_RESERVED_COST, since the master
reserve is used automatically anyway.
-
sscanf(): The new modifier '+' requires the matching of
the characters after a field in order to consider the field
as matched.
- remove_interactive() now preserves the current object
(Bug #431).
- Corrected the tracedepth handling in efun closures and non-toplevel
callbacks
(Bug #441).
- Private lfuns no longer hide simul-efuns.
- Private lfuns can be hidden by public functions without
warning, ie. the former are now really invisible to inheritors. This
also corrects a crasher with multi-level virtual inherits.
- Multiple virtual inheritance of the same program with
changing visibility is now handled with a better calculation of
the final visibilities
(Bug #362).
- Calling an unbound lambda cleaned the control stack
twice, causing errors
(Bug #374).
- Only public simul-efuns can be called. This was always
valid for sefuns outside the 256-range, but now also applies to
normal sefuns as well
(Bug #419).
- For completeness sake: removed the compilation
errors happening when disabling the new inline closures
(Bug #423).
-
present(): Modified the 'n' search behaviour so that the
numbering is applied over both inventory and environment
together. Before, the numbering was individual in each
space, leading to situations where low-numbered objects in the
environment were hidden by those in the inventory
(Bug #417).
- (object.c) Efun function_exists(): The 'FEXISTS_ALL' result also contains
information about the function's type, flags, and number of
arguments
(Bug #410).
- Efuns
md5()/sha1(): Accept the number of iterations as
optional argument
(Bug #418).
- About 3.3.712
- Efun
md5() wasn't 64-bit clean
(Bug #413).
-
foreach(): When looping over a mapping with no values,
or with only the index being extracted, the loop actually loops over the
mapping and not just the indices copied into an array
(Bug #388).
- Efun
set_environment(): clear the RESET_STATE flag of
of the moved object's original environment, if any
(Bug #387).
- Efun
md5()/sha1() can now hash arrays of numbers as well
(Bug #411).
- The string_copy() function checks if the requested
memory is actually allocated, throwing an error if not
(Bug #397).
- Errors during the processing of a fatal() will be
recognized and treated as double-fatal
(Bug #408).
- free_svalue() now recognizes the free of nested
structures and de-serializes them to avoid stack overflows
(Bug #416).
- When re-using a sentence structure for marker_sent,
the shadow_ob member wasn't cleared out, causing crashes
down the road
(Bug #414).
- Efun
bind_lambda() doesn't ignore unbindable closures
when the second argument is missing
(Bug #407).
- Fixed object reference leaks
(Bug #412).
- (pkg-tls.c) When accepting a SSL connection, request a client
certificate. The driver itself won't check the correctness,
but the result will be available in the connection status.
- About 3.3.711
- Implemented a low/high watermark logic for the backend call to
cleanup all objects, in order to prevent the driver from hogging
the CPU.
- Updates to the OpenSSL interface.
- The test for struct equivalence now recurses through
member structs; otherwise changes in an contained struct wouldn't
be reflected in the containing struct, leading to LPC compilation
errors.
-
to_int() no longer accepts "x<num>" as valid sedecimal
notation
(Bug #0000402).
- Errors during the backend cleanup will now find a consistent
virtual machine
(Bugs #0000405
and #0000406).
- About 3.3.710
- Moved the repository from PRCS to Subversion.
- About 3.3.709
- Oops, I accidentally broke compilation on systems which allow
the replacement of the system
malloc() function.
It should now work again
(Bug #0000393).
- About 3.3.706-.708
- Added new efun
pg_conv_string(), courtesy of Philipp.
- Added new flag setting '4' to get_type_info() for closures
to return the function name of lfun closures
(Bug #0000392).
- Possibly corrected a refcounting bug in handling prepositions which
caused crashers
(Bug #0000391).
- Since the operators
#'&, #'|,
#'^ and #'! are now considered efuns, the
closure compiler skipped the special treatment of these. As an added
bonus of the correction, #'| and #'^ can now
take an arbitrary number of arguments, too.
(Bug #0000389).
- If the number of destructed pending objects
exceeds the number of active objects, a cleanup of all objects
is triggered. Also, the incremental cleanup in each cycle
cleans at least the number of objects destructed in the cycle.
- About 3.3.705
-
runtime_error(), runtime_warning() and
heart_beat_error()
now receive a flag telling if the error is caught or not
(Bug #0000385).
- About 3.3.704
- Restoring a saved array with one-character operator closures
like
#'- works again
(Bug #0000384).
- About 3.3.703
-
sprintf("%c", 0) returned an empty string ""
instead of a string with the 0 character "\0" because
internally the system's sprintf() was used for the formatting
(Bug #0000378).
- About 3.3.702
- When printing structs with
sprintf("%O"), the output
now also contains the names of the structure members
(Bug #0000380).
- About 3.3.701
- The
iconv delivered as part of glibc 2.2.5 can get stuck
in an endless loop. The configuration script now disables iconv support
for glibc 2.0-2.2
(Bug #0000377).
- About 3.3.700
- There was a problem in the LPC compiler which lead to memory corruption
whenever two strings were added in a preprocessor condition. Often
enough the corruption was harmless, but sometimes it bit.
- About 3.3.699
- I was hoping to include fixes for two crashers recently discovered,
but no such luck: one is caused by an incompatibility between
FreeBSD and ptmalloc which will take some time to nail down, the
other one occured only once so far and didn't leave much clues.
- When using TLS, the new configuration parameter '--with-tls-path'
can be used to specify the installation location for the TLS
package.
- Corrected a crasher when the TLS certfile locations are printed.
- The config macro LOG_NEW_CLEANUP in config.h can be used to enable the
logging of the new cleanup calls. Use this if the cleanup seems
to hog the CPU to get an idea of how often it is called.
- About 3.3.696-.698
- Ralph provided a couple of adjustments for FreeBSD 5.4 .
- About 3.3.695
- Just a little tweaking to the version number determination.
- About 3.3.694
- Aaaand I had to reintroduce the numeric limit on the number
of objects to data-clean per backend cycle, as even with the
random factor in the timing sometimes hundreds of objects
could become eligible at once.
- About 3.3.693
- I found the probably reason for the lags experienced by some
muds in flaws in the data-cleanup handling (whereas the tunables
in the allocators made no difference in my testing):
- The data cleanup didn't check whether it still had time to spend
or not - as a result the driver could cleanup thousands of objects
in a backend cycle even if it had time for only one.
- I underestimated the amount of data some muds hold in the default
wizlist entry and let the driver clean it up with every object. A
mistake, and now the driver applies the cleanup-time timing
to the fixed structures as well.
- About 3.3.692
-
input_to() and call_out() no longer
accept local references as extra function arguments.
- About 3.3.691
- Since some muds (but not all) report occasional high CPU loads and lag,
I have added a few statistics in order to locate the problem:
- The data-cleanup logs which object is cleant up and how long it
took.
- The slaballoc extstats provide an overall and a weighted average
of how many search steps per free operation are executed.
-
status tables Now provides a weighted average of
the VM ticks and time per execution (command, callout, heartbeat).
- If you suspect the ordering of free blocks to be the culprit, try
undefining the macros
MALLOC_ORDER_LARGE_FREELISTS and
MALLOC_ORDER_SLAB_FREELISTS in config.h. If the lags
get milder by this, but don't go away completely, the root cause
is somewhere else.
- In either case, if you encounter such situations, please gather
information from
status tables, status
malloc, and status malloc extstats, and send it to
me.
- About 3.3.690
- Made the last-data-cleaned statistics more useful.
- About 3.3.689
- The synch heartbeat patch wasn't quite correct: one condition was
still reversed, and I had left some debug code in. ...it had been a
long day.
- About 3.3.688
- The synchronous heartbeats didn't initialise properly, and thus never
executed.
- About 3.3.687
- Gnomi provided a patch improving the configurability of the
call_out() and heartbeat timing at driver compile time; I added some
touches to provide commandline options as well:
- The basic timing granularity and the heartbeat interval time
can be configured at compile time and with the commandline options
--alarm-time and --heart-interval. The
values are available in LPC with the macros
__ALARM_TIME__ and
__HEART_BEAT_INTERVAL__.
- Heartbeats can be executed synchronously (all at the same time as far
as granularity allows, regardless of when inside one hb interval
they have executed last). The commandline options are
--sync-heart and --async-heart; if
enabled, the macro __SYNCHRONOUS_HEART_BEAT__ is
defined.
- About 3.3.686
- Efun
tell_object() can now take a non-string as second
argument, and will call lfun catch_msg() in the receiver.
This functionality is not exactly essential (as it boils down to
a call_other()), but brings tell_object()
more in line with tell_room() and say()
(Bug #0000354).
- Efuns
tell_room() and say() now accept
mappings, structs, and objects as well as arrays for the
catch_msg() mechanism.
- About 3.3.685
- The statistics for hybrid and hash mappings were off.
- The data-cleanup is now controlled solely by the configure time
interval. Previous drivers imposed an additional limitation on the
number of objects data-cleaned in one backend cycle, which
as FinalFrontier demonstrates is too restrictive.
- About 3.3.684
- Finetuned the slab allocator for better use of the slabs.
- Corrected a crasher in the error handling for uncallable closures
(Bug #0000374).
- Corrected the
snoop() manpage
(Bug #0000372).
- About 3.3.683
-
regreplace() put the stack into an inconsistent state,
causing crashes further down the road.
- About 3.3.682
- The mapping indexing with strings was not correct: under certain
circumstances existing entries would not be found.
- Corrected various memory leaks and missing error checks when
using
unique_array() and regreplace()
with faulty closures
(Bug #0000370).
- About 3.3.681
- I reduced the overhead used by the string allocator; in particular
strings no longer need two memory blocks and their hidden overhead.
- About 3.3.678
- Corrected a fatal bug in smalloc/slaballoc which appeared on machines
where sbrk() could be used
(Bug #0000368).
- About 3.3.677
- It is now possible to set the maximum number of mapping keys (entries)
separately from the number of values held. The runtime limits parameter
is
LIMIT_MAPPING_KEYS (the former
LIMIT_MAPPING is an alias hereto), and
LIMIT_MAPPING_SIZE respectively. The configuration and
commandline parameters changed accordingly
(Bug #0000360).
- About 3.3.676
- Corrected a crasher in smalloc.
- Newly allocated core memory is coagulated with existing free memory
where possible
(Bug #0000364).
- About 3.3.675
- Corrected a compilation error when GnuTLS was used.
- Removing an interim pending input_to should no longer mess up
the telnet state (I hope!)
(Bug #0000363).
- About 3.3.674
- During a (re)compilation of the master object, simul-efuns are
disabled to avoid accidental use.
- About 3.3.673
- The permanent block statistics for slaballoc/smalloc was wrong.
The older change descriptions can be read
here.
30-Sep-2007 (Lars Duening) 3.3.715
04-Nov-2006 (Lars Duening, Philip Hancke)
- (pkg-tls, main.c) Added new options --tls-crlfile and --tls-crldirectory
to hold the Certificate Revocation information.
- (pkg-tls, func_spec) New efun tls_refresh_certs() to reload the
certificates and certificate revocations.
(Back to the top.)
09-Jul-2006 (Lars Duening) 3.3.714
(diff to 3.3.713: 33 KB:
http)
14-Jun-2006 (Lars Duening)
- (array.c) Removed a memory leak when array intersection or subtraction
failed.
- (mapping, array, interpret.c, prolang.y) Implemented the array/mapping
intersection.
12-Jun-2006 (Lars Duening)
- Oh dear, has it been that long?
- (make_func.y) Modified a case of undefined behaviour in the creation
of the character classification tables: only 'unsigned char' types have
a defined overflow behaviour (thanks, Erik!)
- (configure) -fno-force-mem is deprecated.
09-May-2006 (Lars Duening)
- (xalloc.c) If the driver runs low on memory, it also prints the
current object and program in the low-on-memory message.
06-May-2006 (Lars Duening)
- (pkg-tls) New efuns hash() and hmac() offer flexible hash and HMAC
calculation if the driver is compiled to use OpenSSL (provided by
Philipp).
- (pkg-tls.c) Removed a compilation error occuring with GnuTLS.
- (lex.c) New macros __OPENSSL__ and __GNUTLS__ are set depending on
which TLS package is being used.
06-May-2006 (Gnomi)
- (prolang.y) Corrected the linenumber counting for inline closures.
23-Apr-2006 (Lars Duening)
- (mstring) The max hash length used is now available as macro constant.
- (otable.c) Both mstrings and C-strings are hashed with the same max
length. This corrects a bug with extremely long object names (Bug #466).
- (structs.c) The calculation of the first part of a struct's hash
uses what the mstring code has already calculated.
30-Mar-2006 (Lars Duening)
- (prolang.y) Removed a dead branch.
- (pkg-tls.c) Removed a possible compiler warning (Bug #464).
- (prolang.y) Removed a bison warning when structs aren't used.
27-Mar-2006 (Lars Duening)
- (pkg-tls.c) Added support for GEN_EMAIL, GEN_URI and GEN_DNS
certificates. tls_verify_callback() now prints diagnostics
only if the '-d' option was given (thanks, Philipp).
18-Mar-2006 (Gnomi)
- (interpret.c) In apply cache entries for non-existing functions, the
garbage collector counted the reference to the string name twice,
causing the use of deallocated memory (Bug #463).
16-Mar-2006 (Lars Duening)
- (comm.c) Moved the declaration of a variable which was declared in the
middle of a block - gcc doesn't complain, but it's not ISO-C (Bug #462).
14-Mar-2006 (Gnomi)
- (closure, object.c, interpret, exec.h, gcollect.c) lfun closures now
keep track to which program they belong, to avoid ambiguities
in case of complex inheritance relationships. This also affects
the savefile format: lfun closures are saved with their inheritance
path (Bug #443, #444).
- (prolang.y) If a non-virtual baseclass was inherited multiple times
with a virtual class inside the inheritance tree, its members
were merged even though they shouldn't (Bug #422).
- (prolang.y) The LPC compiler used a global variable for typetracking,
which caused errors when types changed inside a variable
initialisation (Bug #394).
(Back to the top.)
12-Mar-2006 (Lars Duening) 3.3.713
(diff to 3.3.712: 77 KB:
http)
- Created snapshot.
- (comm.c) Master function disconnect() receives the remaining input data is
passed as the second argument (suggested by Philipp).
08-Mar-2006 (Malcom Tester)
- (lp-245/obj/master.c) Made the move implementation more robust.
07-Mar-2006 (Lars Duening)
- (pkg-tls.c) Two modifications to increase reconnect stability (thanks,
Philipp!).
- (prolang.y) Extended a LPC compiler warning when function indices
are adjusted.
06-Mar-2006 (Lars Duening)
- (backend, comm.c, object) The logon(obj) function moved from
backend.c into object.c, and was renamed logon_object() - it's
more sensical this way.
- (comm.c) If the master::connect() initiates a secure connection
which gets stuck in the handshake, neither logon() is called nor
is the prompt printed. Also, if the tls_init_connection() didn't
set a callback, the driver will provide a callback to logon().
This way logon() won't be called unless the connection is up
and running.
- (mudlib/psyc-tls.c) Example for using the tls_check_certificate()
efun (thanks, Philipp).
03-Mar-2006 (Lars Duening)
- (pkg-tls.c) tls_check_certificate() does more interpretation of
the result and returns better data (provided by Philipp).
01-Mar-2006 (Lars Duening)
- (interpret.c) A missing return is noted at runtime only once per
function. This is achieved by runtime code modification, but we
do that for switch() as well (Bug #430).
28-Feb-2006 (Lars Duening)
- (pkg-idna) Added support for International Domain Names (provided
by Philipp - thanks!).
- (configure, Makefile) Added a target 'install-headers' to install
all driver LPC header files.
- (simulate.c) Virtual blueprint objects are guaranteed to have their
'clone' flag unset.
- (string_spec, simulate.c) Renamed COMP_OBJ to the more intuitive
COMPILE_OBJECT.
- (interpret.c) Removed the stipulation that CATCH_RESERVED_COST
must be twice as much as MASTER_RESERVED_COST, since the master
reserve is used automatically anyway (suggested by Gnomi).
- (efuns.c) sscanf(): The new modifier '+' requires the matching of
the characters after a field in order to consider the field
as matched.
20-Feb-2006 (Lars Duening)
- (Makefile.in) Added a dependency to create patchlevel.h, even if
the program is made with 'make ldmud'.
20-Feb-2006 (Gnomi)
- (comm.c) remove_interactive() clobbered the current_object, setting
it to NULL. It is now preserved (Bug #431).
- (interpret.c) When executing an efun closure, the tracedepth wasn't
incremented accordingly (Bug #441).
- (simulate.c) When executing a non-toplevel callback, the tracedepth
should not be zeroed out (Bug #441).
08-Jan-2006 (Lars Duening)
- (make_func.y) When parsing the func_spec file, the preprocessor
conditionals were handled in a buffer in a no-longer existing
stack frame. So far, we were lucky, but on a 64-bit machine
that space was needed by the Bison parser.
- (driver.h, smalloc.c, slaballoc.c) If the machine uses a 8-Byte
malloc alignment (e.g. all PowerPC machines), the allocator does
not replace the system malloc().
- (mud/lp-245/) Since the recent change to how simul_efuns are called
(see Bug #419), the LP-245 lib was broken. This has been corrected.
05-Dec-2005 (Lars Duening)
- (configure, machine.h.in, config.h.in) Added a configuration check
for SQLite3.
- (pkg-sqlite, many files) Added SQLite support (Bug #11).
04-Dec-2005 (Gnomi)
- (prolang.y) Private lfuns no longer hide simul-efuns.
- (prolang.y) Private lfuns can be hidden by public functions without
warning, ie. the former are now really invisible to inheritors. This
also corrects a crasher with multi-level virtual inherits.
- (prolang.y) Multiple virtual inheritance of the same program with
changing visibility is now handled with a better calculation of
the final visibilities. (Bug #362)
04-Dec-2005 (Lars Duening)
- (interpret.c) Calling an unbound lambda cleaned the control stack
twice, causing errors (Bug #374).
- (simul_efun.c) Only public simul-efuns can be called. This was always
valid for sefuns outside the 256-range, but now also applies to
normal sefuns as well (Bug #419)
- (simul_efun, prolang.y, closure.c, interpret.c) The number of direct
callable simul-efuns is now configurable in the simul_efun.h. I
also increased it to 65536 from 256.
- (closure.c) Simul-efuns were still called with call_other instead
of call_direct.
02-Dec-2005 (Lars Duening)
- (gcollect.c) Added a log output when all objects are data-cleaned, as
it might be the cause for some observed slowdowns.
- (closure.c, interpret.c) For completeness sake: removed the compilation
errors happening when disabling the new inline closures (Bug #423).
27-Nov-2005 (Lars Duening)
- (object.c) Efun present(): Modified the search behaviour so that the
numbering is applied over both inventory and environment
together. Before, the numbering was individual in each
space, leading to situations where low-numbered objects in the
environment were hidden by those in the inventory (Bug #417).
- (object.c) Efun function_exists(): The 'FEXISTS_ALL' result also contains
information about the function's type, flags, and number of
arguments (Bug #410).
26-Nov-2005 (Lars Duening)
- (efuns.c) Efun sscanf(): Added test whether the constant characters after
a %-field also match - if not, the %-field is considered unmatched
(suggested by Largo).
- (efuns, func_spec) Efuns md5()/sha1(): Accept the number of iterations as
optional argument (Bug #418).
(Back to the top.)
24-Nov-2005 (Lars Duening) 3.3.712
(diff to 3.3.711: 9 KB:
http)
- Created snapshot.
- (md5.c) The ROTATE_LEFT macro wasn't 64-bit clean (Bug #413).
- (interpret.c) Using foreach(), when looping over a mapping with no values,
or with only the index being extracted, the loop actually loops over the
mapping and not just the indices copied into an array (Bug #388).
- (object.c) Efun set_environment(): clear the RESET_STATE flag of
of the moved object's original environment, if any (Bug #387).
- (efuns.c) Efun md5()/sha1() can now hash arrays of numbers as well
(Bug #411).
- (xalloc.c) The string_copy() function checks if the requested
memory is actually allocated, throwing an error if not (Bug #397).
- (simulate.c) Errors during the processing of a fatal() will be
recognized and treated as double-fatal (Bug #408).
- (interpret.c) free_svalue() now recognizes the free of nested
structures and de-serializes them to avoid stack overflows (Bug #416).
- (Makefile.in, version.sh, patchlevel.h.in) Removed PRCS support.
24-Nov-2005 (Gnomi)
- (actions.c) When re-using a sentence structure for marker_sent,
the shadow_ob member wasn't cleared out, causing crashes
down the road (Bug #0000414).
- (closure.c) bind_lambda() doesn't ignore unbindable closures
when the second argument is missing (Bug #407).
09-Oct-2005 (Lars Duening)
- (closure.c) replace_program_lambda_adjust() forgot to clear the
object references from the auxiliary lambda it created (Bug #0000412).
08-Oct-2005 (Lars Duening)
- (closure.c) When freeing bound unbound_lambdas, the code forgot to
remove the reference to the creator object of the unbound_lambda.
- (closure.c) Efun symbol_function() leaked an object reference (Bug
#0000412).
- (closure.c, object.h) Made the object reference logs a bit more
expressive.
31-Oct-2005 (Philipp Hancke)
- (pkg-tls.c) When accepting a SSL connection, request a client
certificate. The driver itself won't check the correctness,
but the result will be available in the connection status.
(Back to the top.)
30-Oct-2005 (Lars Duening) 3.3.711
(diff to 3.3.710: 31 KB:
http)
29-Oct-2005 (Lars Duening)
- (backend.c) The backend call to cleanup_all_objects() is now
controlled with a low/high watermark logic, to prevent
repeated calls in consecutive backend cycles: if one cleanup
didn't remove enough destructed objects, it is unlikely
that immediately following ones will.
- (pkg-tls.c) The OpenSSL read/writes are now retried when necessary.
- (configure) When searching for the mysqlclient library in the
usual places, the configure script forgot to clear out the
cache flag.
- (smalloc.c) Removed a compilation error when SBRK_OK wasn't defined.
- (mstrings, many files) The find-in-table statistics were done
incompletely.
- (structs.c) The test for struct equivalence now recurses through
member structs; otherwise changes in an contained struct wouldn't
be reflected in the containing struct.
- (prolang.y) Clarified the 'Unknown type' error messages when
derefencing structs.
19-Oct-2005 (Lars Duening)
- (pkg-tls.c) tls_check_certificate() now returns the low-level API
values, and throws an error if the connection is not secure.
11-Oct-2005 (Lars Duening)
- (erq/erq.c, xerq/socket.c) Corrected compilation warnings.
- (lex.c) to_int() no longer accepts "x<num>" as valid sedecimal
notation (Bug #0000402).
10-Oct-2005 (Lars Duening)
- (backend.c) Added a clear_state() at the beginning of the
process_objects() loop, so that errors during the cleanup find
a consistent machine state (Bug #0000405).
09-Oct-2005 (Lars Duening)
situation, the catch() is ignored. This also fixes an endless
recursion (Bug #0000406).
04-Oct-2005 (Lars Duening)
- (doc/concepts/overloading) New man page (thanks, Coogan!).
28-Sep-2005 (Lars Duening)
- (doc/efun/clone_object) Clarified the variable initialisation.
23-Aug-2005 (Lars Duening)
- (Makefile.in) The PRCS rules first check if PRCS is available.
(Back to the top.)
20-Jun-2005 (Lars Duening) 3.3.710
(diff to 3.3.709: 3 KB:
http)
- (patchlevel.h.in, version.sh, mk-patchlevel.sh, Makefiles)
Modified the version numbering system to be compatible between
Subversion and PRCS.
(Back to the top.)
20-Jun-2005 (Lars Duening) 3.3.709
(diff to 3.3.708: 2 KB:
http)
- (xalloc.c) xalloc used REPLACE_MALLOC before it was defined,
leading to compilation errors on systems supporting it (Bug #0000393).
(Back to the top.)
19-Jun-2005 (Lars Duening) 3.3.708
(diff to 3.3.705: 16 KB:
http)
- (pkg-pgsql, func_spec) Added new efun pg_conv_string(), courtesy
of Philipp.
- (efuns.c) Added new flag setting '4' to get_type_info() for closures
(Bug #0000392).
- (parse.c) Possibly corrected a refcounting bug in handling prepositions
(Bug #0000391).
- (closure.c) Since the operators #'&, #'|, #'^ and #'! are now considered
efuns, the closure compiler skipped the special treatment of these.
As an added bonus of the correction, #'| and #'^ can now take
an arbitrary number of arguments, too. (Bug #0000389)
10-Jun-2005 (Lars Duening) (3.3.707)
- (gcollect, backend.c) If the number of destructed pending objects
exceeds the number of active objects, a cleanup of all objects
is triggered. Also, the incremental cleanup in each cycle
cleans at least the number of objects destructed in the cycle.
06-Jun-2005 (Lars Duening) (3.3.706)
- (object.c, sprintf.c, structs.c) Removed a couple compilation warnings
on x86-64.
(Back to the top.)
15-May-2005 (Lars Duening) 3.3.705
(diff to 3.3.687: 104 KB:
http)
(diff to 3.3.704: 4 KB:
http)
- (simulate.c) runtime_error(), runtime_warning() and heart_beat_error()
received a new argument 'caught' (Bug #0000385).
(Back to the top.)
15-May-2005 (Lars Duening) 3.3.704
(diff to 3.3.703: 2 KB:
http)
- (object.c) Single-character operator closures like #'- couldn't
be restored in arrays due to some outdated hack in the parser
(Bug #0000384 and #0000386).
(Back to the top.)
15-May-2005 (Lars Duening) 3.3.703
(diff to 3.3.702: 2 KB:
http)
- (sprintf) sprintf("%c", 0) returned an empty string instead of a
string with the 0 character, because the code used the system
sprintf() for this formatting internally (Bug #0000378).
(Back to the top.)
14-May-2005 (Lars Duening) 3.3.702
(diff to 3.3.701: 3 KB:
http)
- (sprintf) Printing structures with "%O" or "%Q" in non-compact
mode also prints the names of the structure members (Bug #0000380).
(Back to the top.)
13-May-2005 (Lars Duening) 3.3.701
(diff to 3.3.700: 2 KB:
http)
- (configure) Added a check to see if the system is using a broken iconv
(part of glibc 2.0-2.2) - this iconv can throw the driver into an
endless loop (Bug #0000377).
(Back to the top.)
13-May-2005 (Lars Duening) 3.3.700
(diff to 3.3.699: 2 KB:
http)
- (lex.c) When adding strings in preprocessor conditionals, the lhs
string was freed twice, causing memory corruption (reported by Tobias).
(Back to the top.)
24-Apr-2005 (Lars Duening) 3.3.699
(diff to 3.3.698: 6 KB:
http)
- (config.h.in, gcollect.c) Added a specific define LOG_NEW_CLEANUP
to enable the logging of the automatic cleanup activity. This
is useful if the cleanup is suspicious of hogging the CPU.
- (main.c, pkg-tls.c) Improved the documentation for the TLS commandline
options, removed a crasher when only one of the two cert locations
is specified (thanks, Coogan!).
- (xalloc.c) Added warning if ptmalloc is used under FreeBSD.
- (configure) New configuration parameter '--with-tls-path' allows
to specifiy a non-standard location for the TLS installation.
(Back to the top.)
01-Apr-2005 (Lars Duening) 3.3.698
(diff to 3.3.695: 41 KB:
http)
- (pkg-tls.c) Added FreeBSD 5.4 compatibility (thanks, Ralph!).
- (simulate, many files) Renamed error() to errorf() due to a collision
with gnutls.h include files under newer compilers.
01-Apr-2005 (Lars Duening) (3.3.696, .697)
- (port.c) Corrected a C99 incompatibility (thanks, Ralph!).
- (simulate.c, backend) The commands/s and compiled lines/s statistics
are part of the 'status tables' output.
- (gcollect.c) Added a missing variable initialisation (thanks, Ralph!).
(Back to the top.)
27-Mar-2005 (Lars Duening) 3.3.695
(diff to 3.3.694: 3 KB:
http)
- (patchlevel.h, main.c, lex.c) Simplified the version number handling
in anticipation of the 3.4 branch.
(Back to the top.)
27-Mar-2005 (Lars Duening) 3.3.694
(diff to 3.3.693: 4 KB:
http)
- (backend.c) I reintroduced the numeric limit on the number of objects
to data-clean, as even with the random factor it could happen
that the driver tries to cleanup hundreds of objects in one cycle.
The numeric limit is calculated such that all listed objects can
be cleaned in half of the configured cleanup cycle.
(Back to the top.)
27-Mar-2005 (Lars Duening) 3.3.693
(diff to 3.3.692: 9 KB:
http)
- (slaballoc.c) Corrected the free-steps statistics.
- (backend.c) The data-cleanup didn't pay attention to the backend
timing, occasionally causing the driver to clean up thousands
of objects in one cycle.
- (gcollect.c) The cleanup of the fixed datastructures (wizlist, driver
hooks) did not observe the overall cleanup timing - on muds with
lots of data in the default wizlist entry this lead to annoying
lags.
(Back to the top.)
25-Mar-2005 (Lars Duening) 3.3.692
(diff to 3.3.691: 5 KB:
http)
- (simulate.c) Modified the callback setup so that efun callbacks
can take normal lvalues; and timed function/closure callbacks
take protected lvalues - but not vice versa.
(Back to the top.)
24-Mar-2005 (Lars Duening) 3.3.691
(diff to 3.3.690: 8 KB:
http)
- (gcollect.c) Added a log output for the time it takes to data-clean
objects.
- (config.h.in, slaballoc.c) The sorting of the partial slab freelists
is now configurable by hand.
- (slaballoc.c) Added weighted-average statistics for number of steps
per freed block.
- (interpret, backend.c, call_out.c, efuns.c heart_beat.c, simulate.c)
Added a statistic (last and time-weighted average) about the total
execution ticks and time per LPC thread.
(Back to the top.)
15-Feb-2003 (Lars Duening) 3.3.391
(diff to 3.3.390: 36 Bytes:
http)
(Back to the top.)
20-Mar-2005 (Lars Duening) 3.3.690
(diff to 3.3.689: 36 KB:
http)
- (backend, main, simulate.c) Updated the last-data-cleaned statistics
to be weighted over time; and generalized the statistics implementation
in general.
(Back to the top.)
18-Mar-2005 (Lars Duening) 3.3.689
(diff to 3.3.688: 2 KB:
http)
- (backend.c) Improved the synch heartbeat condition expression.
- (heartbeat.c) I had forgotten to remove all remnants of an exploratory
change.
(Back to the top.)
17-Mar-2005 (Lars Duening) 3.3.688
(diff to 3.3.687: 3 KB:
http)
- (backend.c) The synchronous heartbeat timing wasn't initialised properly.
(Back to the top.)
13-Mar-2005 (Lars Duening) 3.3.687
(diff to 3.3.672: 70 KB:
http)
(diff to 3.3.686: 11 KB:
http)
- (main, backend.c, heartbeat.c) The ALARM_TIME and HEART_BEAT_INTERVAL
time are now configurable at compile and start time (based on
a patch by Gnomi).
(Back to the top.)
12-Mar-2005 (Lars Duening) 3.3.686
(diff to 3.3.685: 7 KB:
http)
- (func_spec, object.c) The efun tell_object() can now take an array,
mapping, struct or object as second argument, calling catch_msg() in
the target in that case (Bug #0000354).
- (func_spec, object.c) The efuns tell_room() and say() can now take a
mapping, object or struct instead of an array as second argument for
the catch_msg() mechanism.
(Back to the top.)
09-Mar-2005 (Lars Duening) 3.3.685
(diff to 3.3.684: 4 KB:
http)
- (mapping.c) The hash/hybrid statistics were somewhat off.
- (gcollect, backend.c, simulate.c) The default time interval for
a data cleanup is now available as macro in gcollect.h . And
since we have that time interval, the number-to-process limit
in process_objects() didn't make much sense anymore.
(Back to the top.)
06-Mar-2005 (Lars Duening) 3.3.684
(diff to 3.3.683: 14 KB:
http)
- (slaballoc.c) Tuned the allocator: the partially-used slab lists
are now lazily order for better usage.
- (interpret.c) For an uncallable closure, the code forgot to clean
out the CSP before throwing the error (Bug #0000374).
- (doc/efun/snoop) Corrected the description of the return value (Bug
#0000372).
(Back to the top.)
26-Feb-2005 (Lars Duening) 3.3.683
(diff to 3.3.682: 2 KB:
http)
- (efuns.c) regreplace() didn't update the stack pointers properly,
causing crashes down the road (reported by Bardioc).
(Back to the top.)
26-Feb-2005 (Lars Duening) 3.3.682
(diff to 3.3.681: 8 KB:
http)
- (mapping.c) Indexing a mapping with strings didn't quite work yet: the
hash computation didn't take into effect that strings are no longer
tabled just to use them as rvalue indices.
- (simulate.c) If a callback didn't have a valid object associated with
it (e.g. unbound_lambda()s), the code forgot to remove the arguments
from the stack (Bug #0000370).
- (simulate.c) Uncalleable closures given as callbacks are now detected
and cause a runtime error (Bug #0000370).
- (simulate.c) A runtime in a regreplace() substitution closure leaked
the regexp structure. I changed the whole thing to automatic
cleanup (Bug #0000370).
(Back to the top.)
24-Feb-2005 (Lars Duening) 3.3.681
(diff to 3.3.678: 23 KB:
http)
- (mstrings) Re-integrated the stringtable structures into the strings:
on the whole, the majority of strings will be tabled so reducing
the overhead for this case is beneficial.
24-Feb-2004 (Lars Duening) (3.3.680)
- (mstrings, closure.c, interpret.c) Debugging 3.3.679: reallocating a
string 'under the hood' is no longer possible as the string data is now
an integral part of the string structure. This disables the
mstr_append() optimizations.
21-Feb-2004 (Lars Duening) (3.3.679)
- (mapping.c) get_map_lvalue() didn't correctly check the mapping size:
it checked against the current and not the future size (Bug #0000369).
- (mapping, simulate.c) Added a statistic for hash and hybrid mappings (for
now just the count).
- (mstrings, gcollect.c, array.c, closure.c, i-svalue_cmp.h, interpret.c,
simulate.c) Simplified the string implementation to reduce the overhead.
(Back to the top.)
21-Feb-2005 (Lars Duening) 3.3.678
(diff to 3.3.677: 5 KB:
http)
- (slaballoc.c, smalloc.c) I hate crashers which don't happen on my machine:
the merging of the esbrk() result with adjacent free blocks crashed
the driver (Bug #0000368).
(Back to the top.)
20-Feb-2005 (Lars Duening) 3.3.677
(diff to 3.3.676: 11 KB:
http)
- (configure, mapping.c, simulate) It is now possible to determine
the max number of mapping entries (keys) in addition to the total
mapping size (Bug #0000360).
- (main.c) New commandline option '--max-mapping-keys' to determine
separately the maximum number of entries in a mapping.
(Back to the top.)
20-Feb-2005 (Lars Duening) 3.3.676
(diff to 3.3.675: 2 KB:
http)
- (smalloc.c) Corrected a crasher in realloc().
- (smalloc.c, slaballoc.c) New memory allocated with esbrk() is now
coagulated with existing free memory if possible (Bug #0000364).
(Back to the top.)
20-Feb-2005 (Lars Duening) 3.3.675
(diff to 3.3.674: 2 KB:
http)
- (pkg-tls.c) Removed compilation errors when using GnuTLS.
- (comm.c) The charmode/noecho mode is changed in remove_input_to()
only if the first pending input_to() is removed. Hopefully this
fixes Bug #0000363.
(Back to the top.)
20-Feb-2005 (Lars Duening) 3.3.674
(diff to 3.3.673: 4 KB:
http)
- (prolang, simulate.c) During the compilation of the master object, simul
efuns are disabled.
(Back to the top.)
20-Feb-2005 (Lars Duening) 3.3.673
(diff to 3.3.672: 4 KB:
http)
- (smalloc.c, slaballoc.c) The memory block size computation failed
on large blocks, giving bad statistics.
(Back to the top.)
The older changelog entries can be read
here.
Summary of changes since 3.2
- Changed efuns:
- Removed obsolete and deprecated efuns:
add_verb(),
add_xverb(),
allocate_mapping(),
copy_mapping(),
efun308(),
extract(),
file_name(),
filter_array(),
filter_mapping(),
m_sizeof(),
map_array(),
map_mapping(),
mapping_contains(),
member_array(),
set_auto_include_string().
transfer().
-
copy(),
deep_copy(),
get_type_info(),
to_array(),
to_string():
Added struct support.
-
add_action(): Historical usage with just one argument
no longer supported.
-
assoc(), insert_alist(),
order_alist(), intersect_alist(): Optional
as package 'alists'.
-
call_out(): The minimum delay can now be 0, meaning:
as soon as possible.
-
catch(): If there is not enough time left (less than
__CATCH_EVAL_COST__), this is thrown as an error from inside
the catch instead of causing the catch to return 0.
-
catch(): Modifier reserve expr can
be used to specify a computing reserve different from
__CATCH_EVAL_COST__.
-
debug_info(): Option
DINFO_DUMP:"memory" to dump a list of all
allocated memory blocks (currently supported just by
smalloc).
-
debug_info(): Added more data to the option
DINFO_DATA:DID_MEMORY result.
-
debug_info(): DINFO_DATA:DID_ST_PACKETS_IN and
DID_ST_PACKET_SIZE_IN are the statistics for the incoming network
traffic.
-
deep_inventory(): The result can be restricted to a certain
depth.
-
filter(): The efun can now filter strings as well.
-
function_exists(): now also returns the filename and
linenumber of a function.
-
function_exists(): The 'FEXISTS_ALL' result also contains
information about the function's type, flags, and number of
arguments.
-
garbage_collection(): An optional flag argument allows to
change the name of the default GC log file.
-
get_type_info(): The name of the defining program of a
lfun or context closure, or the function name itself, can be
returned.
-
map(): The efun can now map strings as well.
-
make_shared_string(): Deprecated.
-
member(), rmember(): The start
position for the search can be specified.
-
mkmapping(): Convert structs to mappings, too.
-
pg_*(): Postgres efuns trigger a privilege violation
("pgsql", "efun name").
-
process_string(): Spaces are now allowed in function
arguments and no longer terminate the function specification.
-
regexp(), regexplode(): Optionally take RE
interpretation options.
-
regexplode(): New flag RE_OMIT_DELIM allows to omit the
matched delimiters from the result.
-
send_erq(): ERQ callback closures can now accept
the data as a string instead of an array.
-
sprintf(), printf(): Formats %O and %Q print
floats always with a decimal point.
-
say(),
tell_room(),
tell_object(): The efuns can now take a mapping,
an object or a struct instead of an array to use with the
catch_msg() mechanism.
-
transfer(): Available (in compat mode) only when
USE_DEPRECATED is in effect.
-
unique_array() The separator function can now be a
closure, and can also be given extra arguments.
-
wizlist_info(): Added the number of mappings to the
result.
-
write_file() Allowed to remove the file before writing.
- Corrected efuns:
-
restore_object(): An exception during the restore no
longer has the danger of leaking values and memory.
-
unique_array(): An exception during the process no longer
has the danger of leaking values and memory.
- New efuns:
-
baseof(): Test the relation between two structs.
-
call_direct(), call_direct_resolved():
To perform calls which
are not resolved by a default method.
-
convert_charset(): Convert a string between character sets.
-
match_command(): Find all matching actions for a command.
-
md5_crypt(): Compute an Apache-compatible password
encryption using the MD5 message digest algorithm.
-
pg_connect(), pg_query(), pg_pending(), pg_close():
Optional: PostgreSQL support.
-
regmatch(): To match a string against a regexp and
optionally retrieve the match results for subexpressions.
-
regexp_package(): Returns the currently selected default
regexp package.
-
reverse(): Reverse the content of an integer, a string
or an array.
-
sha1(): Compute the SHA1 message digest.
-
struct_info(): Return information about a struct.
-
structp(): Predicate to detect struct values.
-
tls_refresh_certs(): Reload the certificates and
certificate revocation information.
-
to_struct(): Convert an array into a struct.
- Master Object:
- Function
runtime_warning() is called for runtime warnings.
-
privilege_violation(): For "set_limits" and "limited"
the requested limits are passed as argument.
- During the compilation of the master object, simul-efuns are disabled
(so they won't be used by accident).
- Fixed Crashers:
- Removed a crasher when a private lfun shadowing
a public sefun was virtually inherited twice in parallel.
- Removed a crasher when a
walk_mapping() over a mapping
deleted elements from the very same mapping.
- Language:
- New operator
... to flatten array arguments in a
function call at runtime.
- Strings can now hold all characters, including '\0'.
-
foreach() can loop over references, integers and
integer ranges.
-
nosave and catch(; nolog) are now
official features.
- New indexing method
[>] to index either from
the beginning or
the end, depending on the sign of the index value.
- New pragma
range_check allows to check array range
indexing at runtime.
- If
switch() is used on a value which is neither
a string nor a number, the driver no longer generates a runtime
error messge, but instead jumps to the default label.
- Operators
| and |= can compute
the union of two arrays.
- Operators
^ and ^= can compute
the symmetric difference of two arrays.
- Closure operators
#'| and #'^ can take more than two arguments.
- Support for structs; preprocessor symbol
__LPC_STRUCTS__
is defined.
- Preprocessor symbol
__PCRE__ is always defined.
- Real inline closures; preprocessor symbol
__LPC_INLINE_CLOSURES__ is defined.
- New macro
__BOOT_TIME__ expands to the time() the
driver was started.
- Blueprint variables are now always initialized using
__INIT(). Clone variables are usually
initialized the same way, however with the pragmas
share_variables and
init_variables the programmer can instruct the
driver on a pre-program basis to initialize the variables
of clone from the current values of the corresponding
variables in the blueprint.
- Bugfix: The type recognition of the variables for a
foreach()
no longer gets confused by visibility flags.
- Runtime:
- Revamped the string handling to use refcounted strings everywhere.
- If input is requested in CHARMODE, the NL characters are passed
verbatim to the caller (old drivers passed an empty string
instead).
- The driver hook
H_DEFAULT_METHOD can be used to
resolve call_other()/call_resolved()s to
non-existing functions.
- The driver hook
H_DEFAULT_PROMPT can be used to specify a
default prompt different from "> ".
- The driver hook
H_PRINT_PROMPT can be used to do special magic
when printing the prompt.
- The driver regularly checks the variables of all objects
for references to destructed objects and removes them; it is
therefore no longer necessary to "clean" mappings by hand.
- The driver can now warn about missing return statements for value
returning functions (this applies only for functions with a
specified return type). If possible the driver tries to detect this
situation at compile time, but also inserts a special 'return'
bytecode to catch certain pathological cases at runtime.
The check is controlled by the pragma
'(
no_)warn_missing_return'.
- New runtime 'limit'
LIMIT_COST to control how much
a limited execution should cost.
- The basic timing granularity and the heartbeat interval time
can be configured at compile time and with the commandline options
--alarm-time and --heart-interval. The
values are available in LPC with the macros
__ALARM_TIME__ and
__HEART_BEAT_INTERVAL__.
- Heartbeats can be executed synchronously (all at the same time as far
as granularity allows, regardless of when inside one hb interval
they have executed last). The commandline options are
--sync-heart and --async-heart; if
enabled, the macro __SYNCHRONOUS_HEART_BEAT__ is
defined.
- Other Changes:
- The input escape character can be configured at compile time to
something different from '!'.
- The MAX_MAPPING configuration parameter now determines the total
number of elements (keys + values) a mapping can hold, not just
the maximum number of keys.
- The driver can be configured to use either the traditional
regular expression code, or the PCRE package.
- New commandline options
--share-variables and
--init-variables to defined the default for clone
variable initialization.
- New configuration option
--enable-malloc-sbrk
to selectively allow the memory allocator to use sbrk() instead of
malloc() where available (default is to allow sbrk()).
- New commandline options
--tls-key and
--tls-cert to define the x509 key- and certfile for
the TLS package.
- New commandline options to handle certification revocations:
--tls-crlfile and --tls-crldirectory.
(Back to the top.)
Last update: Sun, 30 Sep 2007 12:14:56 -0600