diff options
author | Raymond Lu <songyulu@hdfgroup.org> | 2011-02-18 19:01:34 (GMT) |
---|---|---|
committer | Raymond Lu <songyulu@hdfgroup.org> | 2011-02-18 19:01:34 (GMT) |
commit | 4f75c8c24bea54dcbdc64fbcbf7c77b8ae797c61 (patch) | |
tree | 4fe0ae2bd3daee51e0240e7fe0926987e14af1e6 /test | |
parent | 40d2ecb45f317bf2a91fbf937e8cc11c45d9898b (diff) | |
download | hdf5-4f75c8c24bea54dcbdc64fbcbf7c77b8ae797c61.zip hdf5-4f75c8c24bea54dcbdc64fbcbf7c77b8ae797c61.tar.gz hdf5-4f75c8c24bea54dcbdc64fbcbf7c77b8ae797c61.tar.bz2 |
[svn-r20121] Bug 1586 - the datatype handler created with H5Tencode/decode had the reference count 0. I fixed it by changing the APP_REF parameter of H5I_register from FALSE to TRUE and added a test case in dtypes.c.
Tested on jam, heiwa, and amani.
Diffstat (limited to 'test')
-rw-r--r-- | test/dtypes.c | 82 |
1 files changed, 71 insertions, 11 deletions
diff --git a/test/dtypes.c b/test/dtypes.c index 0a3b6e4..655472c 100644 --- a/test/dtypes.c +++ b/test/dtypes.c @@ -4900,6 +4900,10 @@ opaque_funcs(void) * Modifications: Raymond Lu * July 13, 2009 * Added the test for VL string types. + * + * Raymond Lu + * 17 February 2011 + * I added the test of reference count for decoded datatypes. *------------------------------------------------------------------------- */ static int @@ -5328,37 +5332,93 @@ test_encode(void) } /* end if */ /*----------------------------------------------------------------------- - * Close and release + * Test the reference count of the decoded datatypes *----------------------------------------------------------------------- */ - /* Close datatype and file */ - if(H5Tclose(tid1) < 0) { + + /* Make sure the reference counts for the decoded datatypes are one. */ + if(H5Iget_ref(decoded_tid1) != 1) { H5_FAILED(); - printf("Can't close datatype\n"); + printf("Decoded datatype has incorrect reference count\n"); goto error; } /* end if */ - if(H5Tclose(tid2) < 0) { + + if(H5Iget_ref(decoded_tid2) != 1) { H5_FAILED(); - printf("Can't close datatype\n"); + printf("Decoded datatype has incorrect reference count\n"); goto error; } /* end if */ - if(H5Tclose(tid3) < 0) { + + if(H5Iget_ref(decoded_tid3) != 1) { H5_FAILED(); - printf("Can't close datatype\n"); + printf("Decoded datatype has incorrect reference count\n"); goto error; } /* end if */ - if(H5Tclose(decoded_tid1) < 0) { + /* Make sure the reference counts for the decoded datatypes can be + * decremented and the datatypes are closed. */ + if(H5Idec_ref(decoded_tid1) != 0) { + H5_FAILED(); + printf("Decoded datatype can't close\n"); + goto error; + } /* end if */ + + if(H5Idec_ref(decoded_tid2) != 0) { + H5_FAILED(); + printf("Decoded datatype can't close\n"); + goto error; + } /* end if */ + + if(H5Idec_ref(decoded_tid3) != 0) { + H5_FAILED(); + printf("Decoded datatype can't close\n"); + goto error; + } /* end if */ + + /* Make sure the decoded datatypes are already closed. */ + H5E_BEGIN_TRY { + ret = H5Tclose(decoded_tid1); + } H5E_END_TRY; + if(ret!=FAIL) { + H5_FAILED(); + printf("Decoded datatype should have been closed\n"); + goto error; + } + + H5E_BEGIN_TRY { + ret = H5Tclose(decoded_tid2); + } H5E_END_TRY; + if(ret!=FAIL) { + H5_FAILED(); + printf("Decoded datatype should have been closed\n"); + goto error; + } + + H5E_BEGIN_TRY { + ret = H5Tclose(decoded_tid3); + } H5E_END_TRY; + if(ret!=FAIL) { + H5_FAILED(); + printf("Decoded datatype should have been closed\n"); + goto error; + } + + /*----------------------------------------------------------------------- + * Close and release + *----------------------------------------------------------------------- + */ + /* Close datatype and file */ + if(H5Tclose(tid1) < 0) { H5_FAILED(); printf("Can't close datatype\n"); goto error; } /* end if */ - if(H5Tclose(decoded_tid2) < 0) { + if(H5Tclose(tid2) < 0) { H5_FAILED(); printf("Can't close datatype\n"); goto error; } /* end if */ - if(H5Tclose(decoded_tid3) < 0) { + if(H5Tclose(tid3) < 0) { H5_FAILED(); printf("Can't close datatype\n"); goto error; |