# Change log for Varnish 1.0.4

## Changes between 1.0.3 and 1.0.4

### varnishd

- The request workflow has been redesigned to simplify request processing and eliminate code duplication. All codepaths which need to speak HTTP now share a single implementation of the protocol. Some new VCL hooks have been added, though they aren't much use yet. The only real user-visible change should be that Varnish now handles persistent backend connections correctly (see ticket #56).

- Support for multiple listen addresses has been added.

- An "include" facility has been added to VCL, allowing VCL code to pull in code fragments from multiple files.

- Multiple definitions of the same VCL function are now concatenated into one in the order in which they appear in the source. This simplifies the mechanism for falling back to the built-in default for cases which aren't handled in custom code, and facilitates modularization.

- The code used to format management command arguments before passing them on to the child process would underestimate the amount of space needed to hold each argument once quotes and special characters were properly escaped, resulting in a buffer overflow. This has been corrected.

- The VCL compiler has been overhauled. Several memory leaks have been plugged, and error detection and reporting has been improved throughout. Parts of the compiler have been refactored to simplify future extension of the language.

- A bug in the VCL compiler which resulted in incorrect parsing of the decrement (-=) operator has been fixed.

- A new -C command-line option has been added which causes varnishd to compile the VCL code (either from a file specified with -f or the built-in default), print the resulting C code and exit.

- When processing a backend response using chunked encoding, if a chunk header crosses a read buffer boundary, read additional bytes from the backend connection until the chunk header is complete.

- A new ping_interval run-time parameter controls how often the management process checks that the worker process is alive.

- A bug which would cause the worker process to dereference a NULL pointer and crash if the backend did not respond has been fixed.

- In some cases, such as when they are used by AJAX applications to circumvent Internet Explorer's over-eager disk cache, it may be desirable to cache POST requests. However, the code path responsible for delivering objects from cache would only transmit the response body when replying to a GET request. This has been extended to also apply to POST.

  This should be revisited at a later date to allow VCL code to control whether the body is delivered.

- Varnish now respects Cache-control: s-maxage, and prefers it to Cache-control: max-age if both are present.

  This should be revisited at a later date to allow VCL code to control which headers are used and how they are interpreted.

- When loading a new VCL script, the management process will now load the compiled object to verify that it links correctly before instructing the worker process to load it.

- A new -P command-line options has been added which causes varnishd to create a PID file.

- The sendfile_threshold run-time parameter's default value has been set to infinity after a variety of sendfile()-related bugs were discovered on several platforms.

### varnishlog

- When grouping log entries by request, varnishlog attempts to collapse the log entry for a call to a VCL function with the log entry for the corresponding return from VCL. When two VCL calls were made in succession, varnishlog would incorrectly omit the newline between the two calls (see ticket #95).

- New -D and -P command-line options have been added to daemonize and create a pidfile, respectively.

- The flag that is raised upon reception of a SIGHUP has been marked volatile so it will not be optimized away by the compiler.

### varnishncsa

- The formatting callback has been largely rewritten for clarity, robustness and efficiency.

  If a request included a Host: header, construct and output an absolute URL. This makes varnishncsa output from servers which handle multiple virtual hosts far more useful.

- The flag that is raised upon reception of a SIGHUP has been marked volatile so it will not be optimized away by the compiler.

### Documentation

- The documentation—especially the VCL documentation—has been greatly extended and improved.

### Build system

- The name and location of the curses or ncurses library is now correctly detected by the configure script instead of being hardcoded into affected Makefiles. This allows Varnish to build correctly on a wider range of platforms.

- Compatibility shims for clock_gettime() are now correctly applied where needed, allowing Varnish to build on MacOS X.

- The autogen.sh script will now correctly detect and warn about automake versions which are known not to work correctly.