RELEASE NOTES for qore v0.7.1
release summary: qore 0.7.1 is a bugfix release from 0.7.0
release overview:- bug fixes
- new ABI 5.0, problems were found with ABI 4.0
- packaging and build updated to support building universal binaries on Darwin
- support for atomic operations in 64bit builds with itanium processors
- support for stack guard including RSE monitoring in 64-bit builds on itanium processors
- default module dir change, module handling updated
- network event notification support
- implemented the ability to specify qore, module, and feature version requirements
- misc additions
bug fixes
* fixed a bug in the != operator for strings
!= would return True for strings with different encodings but otherwise equal content; this has been fixed to return False
* fixed a bug in QoreString::set()
* fixed 2 crashing bugs in the "-" operator
the operator functions were expecting certain arguments but the operator code was making partial matches and sending other types to the functions. Added the ability for an operator function to require an exact argument match for both arguments.
* fixed evaluation of nonsensical arguments with the "-" and "+" operators
now this will return NOTHING instead of nonsense
* fixed a crashing bug in the FtpClient class
the FtpClient class was not usable in Qore 0.7.0
* fixed a parsing bug with the switch statement
when a case value using a constant was not resolved, it caused a crash (affected debug builds only)
* fixed parsing XML-RPC arrays when the first element is empty
would previously generate an exception even though the XML was valid
* mostly fixed signal handling on Darwin
however for some reason it looks like signal handling after a fork() on Leopard (OS/X 10.5, Darwin 9.5) is broken. I haven't figured out why.
* fixed a setting the URL in the HTTPClient class with only a path if a hostname is already set
* fixed a bug setting the URL in parseURL()
* fixed a bug parsing the Content-Type in the HTTPClient class
* fixed Queue::copy()
now copies the elements in the original Queue instead of returning an empty object
* fixed a problem with exit() when threads were active
* fixed the problem where exit() caused a random segmentation fault when other threads were active by doing the following:
- all threads started with joinable status PTHREAD_CREATE_JOINABLE, threads call pthread_detach() before exiting
- implemented a new function, qore_exit_process() to be called instead of exit() that calls pthread_cancel() on each thread (except the calling thread) and then pthread_join() on that thread
- added a call to pthread_testcancel() in AbstractStatement::exec()
* fixed bugs in JsonRpcClient and XmlRpcClient where a new connection was established with each request
* fixed a bug in the HTTPClient where a new connection was established for each request even if the connection was already open and Keep-Alive was set
* fixed socket handling on HPUX 64/bit builds
the header files declare socklen_t to be 8 bytes wide, but the libraries expect a pointer to a 32-bit value* fixed getAllThreadCallStacks()
(only enabled with debugging builds and with the explicit configure option: --enable-runtime-thread-stack-trace because it has a performance penalty) by requiring all threads to grab a read lock before updating the thread stack, and getAllThreadCallStacks() to grab a write lock before reading all threads' call stacks. This function was not thread-safe before now.* SOAP improvements in example code
in the examples/ directory: WSDL.qc, SoapHandler.qc, SoapClient.qc, HTTPServer.qc
soap 1.2 is handled better, namespace handling improvements
new ABI 5.0, problems were found with ABI 4.0
The 4.0 ABI was supposed to be fixed for a while; hopefully version 5.0 will last a little longer :-)
The multi-byte character support was defective; it could lead to reading from outside the buffer, so functions in QoreEncoding.h were updated.
Also it turns out that an array is not the same as a pointer to the array type; and the array size of global objects is somehow part of the ABI.
Changing any of these arrays (including character arrays) caused ABI issues, which was really a bad situation.
The following symbols are now pointers (all except the last are in Qore.h, the last is in QoreProgram.h):
DLLEXPORT extern const char *qore_version_string;
DLLEXPORT extern const char *qore_target_os;
DLLEXPORT extern const char *qore_target_arch;
DLLEXPORT extern const char *qore_module_dir;
DLLEXPORT extern const char *qore_cplusplus_compiler;
DLLEXPORT extern const char *qore_cflags;
DLLEXPORT extern const char *qore_ldflags;
DLLEXPORT extern const char *qore_build_host;
DLLEXPORT extern const char **qore_warnings;
The old definitions were:
DLLEXPORT extern const char qore_version_string[];
DLLEXPORT extern const char qore_target_os[];
DLLEXPORT extern const char qore_target_arch[];
DLLEXPORT extern const char qore_module_dir[];
DLLEXPORT extern const char qore_cplusplus_compiler[];
DLLEXPORT extern const char qore_cflags[];
DLLEXPORT extern const char qore_ldflags[];
DLLEXPORT extern const char qore_build_host[];
DLLEXPORT extern const char *qore_warnings[];
Note that module API 0.4 (supported by qore 0.7.0) is not supported
packaging and build updated to support building universal binaries on Darwin
Qore header files and build were updated to support building Universal binaries by using cpp macros to select the right inline assembly code or defines for atomic operation and stack guard support in the macros-*.h header files.
support for atomic operations in 64bit builds with itanium processors
supported with g++ and aCC, 64-bit builds only
Note that if you built qore 0.7.0 for 64bit itanium previously, the ABI now will be completely incompatible with this version due to atomic operation support, therefore all modules will have to be rebuilt with the new header files.
support for stack guard including RSE monitoring in 64-bit builds on itanium processors
RSE = Register Stack Engine: the itanium has basically 2 stacks, a normal stack and a register stack; qore now will throw an exception before either stack will overflow.
default module dir change, module handling updated
the default module directory is $libdir/qore-modules; all modules should be stored in this directory from now on. Modules are also expected to append the module api supported to the file name (i.e.: module-api-0.5.qmod).
Qore has been updated to support multiple module APIs; when loading a feature, the corresponding module name will be searched with the module api tag in descending order, if not found then the filename without a module api will be searched.
network event notification support
you can now add an event queue (Queue object) to the Socket, HTTPClient, FtpClient, XmlRpcClient, and JsonRpcClient classes.
Currently the Socket, HTTPClient, and FtpClient classes all post events to the event queue, if one is set.
The events allow for more detailed reporting of the technical events occurring during network operations that are abstracted to a relatively high level through the previously-listed classes.
The events supported are:
EVENT_PACKET_READ
EVENT_PACKET_SENT
EVENT_HTTP_CONTENT_LENGTH
EVENT_HTTP_CHUNKED_START
EVENT_HTTP_CHUNKED_END
EVENT_HTTP_REDIRECT
EVENT_CHANNEL_CLOSED
EVENT_DELETED
EVENT_FTP_SEND_MESSAGE
EVENT_FTP_MESSAGE_RECEIVED
EVENT_HOSTNAME_LOOKUP
EVENT_HOSTNAME_RESOLVED
EVENT_HTTP_SEND_MESSAGE
EVENT_HTTP_MESSAGE_RECEIVED
EVENT_HTTP_FOOTERS_RECEIVED
EVENT_HTTP_CHUNKED_DATA_RECEIVED
EVENT_HTTP_CHUNK_SIZE
EVENT_CONNECTING
EVENT_CONNECTED
EVENT_START_SSL
EVENT_SSL_ESTABLISHED
For most events posted to the event Queue, associated detailed information is posted to the queue along with the event type a listed above; for example when the EVENT_HTTP_CONTENT_LENGTH event is posted, the number of bytes given in the content-length header is also posted.
See the Qore 0.7.1 documentation for more information; see examples/qget for an example of a qore script using this new functionality (for example, run examples/qget -v <url> to see all network events as a URL is retrieved).
implemented the ability to specify qore, module, and feature version requirements
you can now use:
%requires <module> OP <version>
where OP is one of <, <=, =, >=, >
for example:
%requires oracle >= 1.0.1
also a special feature "qore" was implemented to give a requirement for the qore library, for example:
%requires qore >= 0.7.1
misc additions
added AF_UNIX and AF_LOCAL constants (which are actually interchangable)
| < Prev | Next > |
|---|





