New feature for developers.
Description:
Added "function stack" tracing to library. This allows developers (there
is no public API) to call H5FS_print within the library and get a listing
of the functions traversed to reach that point in the library. Eventually,
I may add support for reporting the parameters to each function also...
Mainly for debugging parallel I/O programs, but I think it will come in
handy in other cases also.
The function stack tracking is controlled with a configure switch:
--enable-funcstack, which defaults to enabled currently. When we branch
for 1.6, we should change the default setting on the branch to be disabled.
Also, added a destructor to the thread-specific keys when thread-safety is
turned on in the library. Otherwise, they were leaking memory and causing
difficult to debug errors in threaded programs (like the test/ttsafe test).
Platforms tested:
Tested h5committest {arabica (fortran), eirene (fortran, C++)
modi4 (parallel, fortran)}
FreeBSD 4.7 (sleipnir) w/thread-safety enabled.
Misc. update:
Updated MANIFEST with new files added (src/H5FS.c & src/H5FDprivate.h)
Update release_docs/RELEASE with thread-safety bug fix.
41 lines
1.6 KiB
C
41 lines
1.6 KiB
C
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
|
* Copyright by the Board of Trustees of the University of Illinois. *
|
|
* All rights reserved. *
|
|
* *
|
|
* This file is part of HDF5. The full HDF5 copyright notice, including *
|
|
* terms governing use, modification, and redistribution, is contained in *
|
|
* the files COPYING and Copyright.html. COPYING can be found at the root *
|
|
* of the source code distribution tree; Copyright.html can be found at the *
|
|
* root level of an installed copy of the electronic HDF5 document set and *
|
|
* is linked from the top-level documents page. It can also be found at *
|
|
* http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html. If you do not have *
|
|
* access to either file, you may request a copy from hdfhelp@ncsa.uiuc.edu. *
|
|
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
|
|
|
/*
|
|
* Header file for function stacks, etc.
|
|
*/
|
|
#ifndef _H5FSprivate_H
|
|
#define _H5FSprivate_H
|
|
|
|
#ifdef NOT_YET
|
|
#include "H5FSpublic.h"
|
|
#endif /* NOT_YET */
|
|
|
|
/* Private headers needed by this file */
|
|
#include "H5private.h"
|
|
|
|
#define H5FS_NSLOTS 32 /*number of slots in an function stack */
|
|
|
|
/* A function stack */
|
|
typedef struct H5FS_t {
|
|
int nused; /*num slots currently used in stack */
|
|
const char *slot[H5FS_NSLOTS]; /*array of function records */
|
|
} H5FS_t;
|
|
|
|
H5_DLL herr_t H5FS_push (const char *func_name);
|
|
H5_DLL herr_t H5FS_pop (void);
|
|
H5_DLL herr_t H5FS_print (FILE *stream);
|
|
|
|
#endif /* _H5FSprivate_H */
|