CAVERNsoft G2 Release updates

   (Last updated October 26, 2000)

Current Release:
Networking modules:    CAVERNsoft 1.2
HIgher level modules:   Modules_1.2

Latest update:
Networking modules:    26 October 2000
Higher level modules:   16 October 2000

 Bug fixes made after 1.2 release version

    1. CAVERNdb_client_c class :
                 A memory leak was fixed in the CAVERNdb_client::process().The udpData character array  is allocated here and was not deleted anywhere else. This has been corrected.

   2. Makefile changes:
                In CAVERN_MAKEFILE_INCLUDES.LINUX_X86 the default compiler has been set to g++ .

   3. The perf_daemon directory was not set up when the distribution was installed. This has been corrected too.

 Changes in higher level modules:

        Modules now available on Linux:
        The higher level modules have been ported to linux and tested. New Makefiles have been added for compiling on linux. A script in the modules
        directory called Make.script takes care of  compiling all modules with the appropriate Makefile in each directory.

        New Performer Articulated Avatars:
        New performer articulated avatars have been added to the distribution. The older perfavatars are now obsolete and moved into a directory called
        obsolete. The articulated avatars have arm articulation incorporated, done with simple equation solving. The coanim and limbo programs now use the
        articulated avatars instead.
        New directories called armarticulation and perfarticavatar have files concerning articulated avatars.

Changes in networking modules since the 1.1 release version (dated May 12, 2000)

New Modules Distribution:
The modules have been separated from the rest of the CAVERNsoft distribution. There are now two distribution files that can be downloaded - the networking modules and higher level modules.

Networking modules now on Solaris and Free BSD platforms:
Networking libraries have been compiled and tested on Solaris and Free BSD machines and the corresponding makefiles are included in the

CAVERNdb_c classes:
An UDP Reflector has been included in the db server class to make a unreliable connection available for db clients to be used with the 'put' API. The init function of the server hence also takes in a parameter to specify a port to which the udp reflector is to be bound to.
1. The fetch remains to be only via a reliable connection
2. The user has to use an unreliable connection for all other clients while doing a 'put' - if the updates made in a key is to reach other clients.  In other words using a reliable TCP connection makes sure that all other clients get updated by default, but when a UDP connection is used for a put, the updates only reach the clients who also use an unreliable connection.

CAVERNnet_udpReflector_c class
UDP reflector has a intercept callback incorporated - so the user can use this to intercept incoming messages and call a user defined callback, as in the tcp reflector. This was needed for using the datahandler in the db_server class, for using the udpreflector for a put function.

CAVERNnet_extended* classes:
Fixed potential memory leaks in array functions

CAVERNts_thread_c class:
Fixed the bug in creating threads - a default pthread_detach() is done when a thread is created - this helps in automatic deallocation of memory when threads are created and allow us to create more threads asynchronously.

CAVERNnet_datapack_c class:
The following functions have been included to help in packing and unpacking arrays of numbers:

int packFloatArray(float* val, int sz) ;
int packDoubleArray(double* val, int sz) ;
int packIntArray(int* val, int sz) ;
int packInt32Array(int32* val, int sz) ;
int packInt64Array(int64* val, int sz) ;
int packLongArray(long* val, int sz) ;

int unpackFloatArray(float* Answer, int sz);
int unpackDoubleArray(double* Answer, int sz);
int unpackIntArray(int* Answer, int sz);
int unpackInt32Array(int32* Answer, int sz);
int unpackInt64Array(int64* Answer, int sz);
int unpackLongArray(long* Answer, int sz);

Read me instructions:
The Read me documents for installation have been slightly modified and rearranged. This changes page has been added, to give the date of a release and the changes from the previous release, starting from version 1.0b

New Cavern file list class:
The classes CAVERNmisc_fileInfo_c and CAVERNmisc_fileList_c have been added.

This is basically to obtain a list of files in a given path. A recursive listing option is also included. This is used in the CAVERNnet_remoteFileIOClient32_c and CAVERNnet_remoteParallelFileIOClient32_c  classes, wherein a list of files, given a path from a remote machine can be obtained ( the getRemoteFileList() function)

These classes are available on SGI, Linux and Sun machines only (not windows and free bsd)

CAVERNnet_udp_c class -  parameter for Non blocking mode:
The receive and send calls in CAVERNnet_udp_c take in parameters for the non blocking mode. The default is blocking mode (but
if makenonblocking() is called before these calls - the blocking mode remains non blocking)

CAVERNnet_tcpClient_c class - function to set socket options:
void  setSockOptions (int option, int buffersize)
This is an interface to the setsockopt() function- currently just accepts a socket buffer size and sets it.

        Instrumenting Parallel File IO classes:
        CAVERNnet_remoteParallelFileIOClient32_c and CAVERNnet_remoteParallelFileIOClient64_c classes have been instrumented and performance monitoring
        functions have been added. The CAVERNnet_parallelTcpClient_c class has now utility functions to get the IP and ports of the self and remote machines

        Makefile updates:
         The target 'everything' in the Makefile has been modified to compile the library without globus. Globus can be compiled by typing
         make everything_with globus

What was new in CAVERNG2 version 1.1 ?

If you have any problems or questions, send e-mail to for direct support.