
Anthony Chan:

09/21/04:  added MPI_Finalize() call, added fprintf to MPI_Init() and
           MPI_Finalize() to indicate that Collective Checking is being used.

09/22/04:  added matching free() to the corresponding malloc() in all *.c
           files to the memory leak.

09/25/04:  added checking statements for the return of MPI_Type_get_envelope()
           in cff_prof_hash_dtype() before malloc().

10/11/04:  fixed returned type of malloc() pointer to match the arguments
           used in MPI_Type_get_contents() in hash_dtype().

04/01/05:  total rewrite of the datatype signature hash matching code to
           eliminate the completely broken old code.
           1) Fixed the totally broken algorithm that combines basic
              MPI_Datatype signatures.
           2) Added support for all the basic MPI_Datatypes defined in
              mpich2's mpi.h.
           3) Fixed the 25% hash collison rate when combining any 2 basic
              MPI_Datatype signatures by changing the basic MPI_Datatypes'
              assigned hash value from consecutive integers to consective
              odd integers.
           4) Assigned struct/composite predefined MPI_Datatypes with
              consistent hash values that match the combined signatures
              of the corresponding predefined MPI_Datatypes.
           5) the old code used mainly MPI_Bcast in all datatype hash
              communication algorithm.  This oversimplied algorithm was,
              strictly speaking, insufficient test.  The new code added
              more helper rountines that closely match the communication
              patterns of the corresponding profiled MPI collective calls.
              That should allow error detection more straight forward and
              allow more transparent error messages (when error reporting
              system is fixed).
           6) Replaced some of clumsy logic that uses MPI_Send/MPI_Recv
              in broadcasting error by more straight forward MPI collective
              calls.
           7) Added the support of alloca() in configure,
              i.e. replaced malloc()/free() by alloca() if available.
           8) Fixed the check of MPI_IN_PLACE in MPI_Allreduce/MPI_Allgather.
