blob: c50a3bcc31171e3ec360cd6d28c0d7480f345a7a [file] [log] [blame]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Apache Rivet Release Notes</title>
<link rel="stylesheet" href="../templates/wondrous/styles.css" type="text/css" />
</head>
<body>
<div id="container">
<div id="header">
<h1><a href="../index.html">Rivet</a></h1>
<h2 id="slogan">Webscripting for Tcl'ers</h2>
<div class="clear"></div>
</div>
<div id="body">
<div id="content">
<h2>Apache Rivet Release Notes</h2>
<p>Apache Rivet current stable version is 3.2.0</p>
<dl>
<dt>Rivet 3.2.0 release notes</dt>
<dd>
<p>
<h4>Rivet 3.2.0</h4>
This version fully embraces threads as the fundamental agents that run Tcl interpreters and
respond to HTTP requests as content generators. As such threads now by default individually
terminate and release their resources when the <b>exit</b>
is called.
This policy change is relevant to the worker and lazy bridges which were
developed to match the requirements imposed by the worker and event MPMs. The prefork bridge
(which is bound to work with the prefork MPM) is unaffected. </p>
<p>The previous policy of forcing all threads to terminate before a child process calls Tcl_Exit
can be reestablished setting the <b>SingleThreadExit</b>
boolean directive to <i>Off</i>
. This is
demanded in cases where calling Tcl_DeleteInterp is not safe because,for instance, not properly
designed third-party extensions fail to correctly release their resources and can cause process crashes.
<!--Nonetheless this setting is discouraged because in case of high workload the <b>exit</b> command
can cause 505 internal server errors. -->
</p>
<p>
Even though Tcl's <b>exit</b>
command regular usage should be avoided in the design of code,
it can be useful in the development process as a tool to escape irreversible conditions
thay may occur. The <b>exit</b>
command causes the deletion of a thread with its interpreters
making possible to a bridge to replace it with a pristine one.
</p>
<p>If you need to use unsafe extensions that may cause crashes when Tcl_DeleteInterp is called
the recommended option is to select the prefork MPM in your server configuration</p>
<h4>New commands</h4>
<ul>
<li>The new <b>::rivet::thread_id</b>
command has been introduced.
<b>::rivet::thread_id</b>
returns the hexadecimal thread id printed
in the very same format adopted by the <b>::thread::id</b>
command (package Thread).
Therefore if you need this information for debugging or logging you don't need to
require package Thread for that. <p>
<b>[::rivet::thread_id -decimal]</b>
returns a decimal id that can be matched with the thread id printed in the
apache logs </p>
</li>
</ul>
<h4>Fixed bugs</h4>
<ul>
<li>The <b>::rivet::upload</b>
command argument checking has been rewritten in order to have a terse
code for handling the several sub-command/argument combinations and also with the purpose
of fixing a bug that caused server crashes </li>
</ul>
<h4>Test suite extended</h4>
<ul>
<li>The server utility now handles the supplementary switches -mpm and -bridge<ul>
<li>The first selects a specific MPM to run the tests</li>
<li>The second selects a bridge different from the default. The only cases when the use of
both of them is meaningful is to test the worker or lazy bridge with the prefork MPM or the
lazy bridge with the worker MPM</li>
</ul>
e.g.:<pre> ./runtests.tcl &lt;path-to-httpd&gt; -mpm worker</pre>
</li>
</ul>
<h4>Internals</h4>
<p>Modifications to the internal code that are transparent to the Tcl development include
an expansion of mod_rivet's global data structure that now contain all the server-wide configurable options
previously stored in the configuration records
</p>
</dd>
</dl>
<dl>
<dt>Rivet 3.1 release notes</dt>
<dd>
<h4>Rivet 3.1.1</h4>
<ul>
<li>Rivet 3.1.1 attempts to solve various problems with
the CMake scripts needed to build mod_rivet on Windows</li>
<li>Several broken links in the manual were fixed</li>
</ul>
<h4>Rivet 3.1.0</h4>
<ul>
<li>Rivet 3.1.0 is a bug fix release of Rivet 3.0.3. The decision of
releasing a new point release has been suggested by the nature of the fix that,
even though unlikely, in principle might break existing code developed on
wrong assumptions about the behavior of commands
<b>::rivet::var_ps</b>
and <b>::rivet::var_post</b>
</li>
</ul>
</dd>
<dt>Rivet 3.0 release notes</dt>
<dd>
<h4>Rivet 3.0.3</h4>
<ul>
<li>Packages in DIO are anymore assuming the rivet command set has been
imported into the global namespace</li>
<li>A minor change to ::rivet::xml provides a new form to
generate self closing elements</li>
</ul>
<h4>Rivet 3.0.2</h4>
<ul>
<li>Fixed a bug in the default error handler</li>
<li>Other minor changes only relevant to mod_rivet code and with
no interest at the application level (see the Changelog file to know more)
</li>
</ul>
<h4>Rivet 3.0.1</h4>
<ul>
<li>rivet Namespace determination in librivet has been revised to
avoid to check for the module globals and therefore avoiding
the inclusion of mod_rivet.h
</li>
<li>A few details in the worker bridge have been fixed, including
a thread root interpreter initialization</li>
<li>the lazy bridge has been extensively commented</li>
<li>documentation has been expanded and corrected in various sections</li>
</ul>
</dd>
<dt>Rivet 2.4</dt>
<dd>
<h4>Rivet 2.4.0</h4>
<ul>
<li>Rivet 2.4.0 is a bug fix release of Rivet 2.3.5. The new point
release was done on the same ground of 3.1.0: marking the fact that this version
could potentially (though unlikely) create regressions if commands <b>::rivet::var_post</b>
and <b>::rivet::var_qs</b>
are improperly used
</li>
</ul>
</dd>
<dt>Rivet 2.3</dt>
<dd>
<h4>Rivet 2.3.5</h4>
<p>
Rivet 2.3.5 is a bug fix release for rivet 2.3. Rivet 2.3.5 received contributions
from Ronnie Brunner and Jeff Lawson
<ul>
<li>Fixed server initialization procedure. ServerInitScript is now executed only once, the second time
the server initialization callback is called</li>
<li>Fixed test suite problem with virtual host handling in certain installations</li>
<li>Mysql DIO connector now handles also the special value NULL for a column</li>
<li>Fixed buffer overflow bug in libWWW</li>
<li>Tcl environment now can be loaded also from outside mod_rivet</li>
<li>Command <strong>::rivet::redirect</strong>
now accepts integer status code
to control redirection. This enables the command to emit status codes other than
301 and 302 </li>
</ul>
</p>
<h4>Rivet 2.3.4</h4>
<p>
<ul>
<li>Fixed buffer allocation size in command <strong>::rivet::escape_sgml_chars</strong>
(fixes bug #61353) </li>
<li>Random number generator is re-seeded for each interpreter thus to guarantee they
will output different sequences</li>
<li>package <strong>formbroker</strong>
now handles also boolean type of data </li>
<li>invocation of rivet commands has been fully qualified with the <strong>::rivet</strong>
namespace </li>
</ul>
</p>
<h4>Rivet 2.3.3</h4>
<ul>
<li>DIO: String quoting of the Posgresql connector was incorrect and has been fixed (closes bug #60378)</li>
<li>
New package <strong>formbroker</strong>
: this package is a form response broker and validator,
still experimental but usable
</li>
<li>Fixed typo in manual page</li>
<li>
Change in mod_rivet internals: as a content generator mod_rivet has to figure out
when a request has to be handled or passed on to other modules.
The request type is now determined more correctly from
the field <q>header</q>
of the <strong>request_rec</strong>
(previosly was
<q>content_type</q>
)
</li>
</ul>
<h4>Rivet 2.3.2</h4>
<p>
<ul>
<li>The test suite now requires Apache 2.4</li>
<li>Commands <strong>::rivet::try</strong>
and <strong>::rivet::catch</strong>
have been fixed. Under some circumstances they failed to properly evaluate
the code they are supposed to guard and control </li>
<li>A new utility command <strong>::rivet::url_query</strong>
composes the query part of an URL from a list of parameter-value pairs </li>
</ul>
</p>
<h4>Rivet 2.3.1</h4>
<p>
Rivet 2.3.1 is a bug fix release for package rivet 2.3. Method 'file' which was
to print an HTML5 <pre class="programlisting">&lt;input type="file" name="...."/&gt;</pre>
was actually printing an email form field. This problem was not serious but affected any serious
development of forms using rivet's form package
</p>
<h4>Rivet 2.3.0</h4>
<p>
Rivet 2.3.0 consolidates the 2.2.x module series with several improvements in the way
the command export was handled. This will be the last 2.x version series in preparation
of the newly developed 3.0 module.
</p>
<p>
Rivet 2.3.0 introduces the command <b>::rivet::try</b>
and <b>::rivet::catch</b>
as a wrappers of the Tcl core
language <b>try</b>
and <b>catch</b>
commands. These commands are not exported to
the global namespace even when
mod_rivet is build with the <i>--enable-rivet-commands-export</i>
and they should be
used within Rivet scripts to protect any <b>::rivet::abort_page</b>
and
<b>::rivet::exit</b>
execution. These commands interrupt code execution by
raising a Tcl error with reserved error codes (respectively ABORTPAGE and EXITPAGE) to
signal the module to fire the AbortScript Tcl script with special codes accessible
through the <b>::rivet::abort_code</b>
command
</p>
<p>
Execution of <b>::rivet::try</b>
fails if mod_rivet is not built with Tcl &gt;= 8.6
</p>
<p>
Command <b>::rivet::exit</b>
was also introduced to give the command
<b>exit</b>
a more sensible behaviour within the context of the Apache HTTP Web Server.
In fact the core command has become an alias of <b>::rivet::exit</b>
which interrupts
the script execution and hands control on to an AbortScript. Then it completes the
request and just before returning to the web server framework it terminates the child
process by calling <b>Tcl_Exit</b>
</p>
<p>
This command replaces the <b>exit</b>
core command and it's provided as a way
to give it a meaning within the Rivet and Apache context but the
programmer should avoid to use it and instead adopt proper software design
to bring about sudden process termination
</p>
</dd>
</dl>
<div class="contentbottom">
</div>
</div>
<div class="sidebar">
<ul>
</ul>
<ul>
<li id="tclstuff">
<h4>Rivet &amp; Tcl</h4>
<ul class="blocklist">
<li class="navitem">
<a class="navitem" title="The Rivet development team" href="about.html">About Us - Contact</a>
</li>
<li class="navitem">
<a class="navitem" title="Home of Apache Tcl related stuff" target="asf" href="http://tcl.apache.org/">Apache Tcl Home</a>
</li>
<li class="navitem">
<a class="extern" title="The Tcl Developer Xchange" target="tclxchange" href="http://www.tcl.tk/">The Tcl/Tk Language</a>
</li>
<li class="navitem">
<a class="extern" title="Tcl community wiki site" target="tclwiki" href="http://wiki.tcl.tk/">Tcl'ers Wiki</a>
</li>
</ul>
</li>
<li id="rivetstuff">
<h4>Getting Rivet to Work</h4>
<ul class="blocklist">
<li class="navitem">
<a class="navitem" title="Getting Rivet" href="download.html">Getting Rivet</a>
</li>
<li class="navitem">
<a class="navitem" title="Release Notes" href="release%2dnotes.html">Release Notes</a>
</li>
<li class="navitem">
<a class="extern" title="Apache Rivet Bugzilla" href="https://issues.apache.org/bugzilla/buglist.cgi?quicksearch=Rivet">Bug Reports</a>
</li>
</ul>
</li>
<li id="documentation">
<h4>Documentation</h4>
<ul class="blocklist">
<li class="navitem">
<a class="navitem" title="Examples" href="hello%5fworld.html">Examples</a>
</li>
<li class="navitem">
<a class="navitem" title="Manuals" href="manuals.html">Manuals</a>
</li>
</ul>
</li>
</ul>
<ul>
<li id="acknowledgments">
<h4>Acknowledgments</h4>
<ul class="blocklist">
<li class="navitem">
<a class="navitem" title="ASF Sponsorship" href="http://www.apache.org/foundation/thanks.html">ASF Sponsorship</a>
</li>
</ul>
</li>
</ul>
</div>
<div class="clear"></div>
</div>
</div>
<div id="footer">
<div class="footer-content">
<p><a href="http://www.apache.org/">Apache Software Foundation</a> | Design by <a href="http://www.spyka.net">Free CSS Templates</a> | <a href="http://www.justfreetemplates.com">Free Web Templates</a></p>
</div>
</div>
<div style="text-align: center; font-size: 0.75em;">Design downloaded from <a href="http://www.freewebtemplates.com/">free website templates</a>.</div></body>
</html>