Any thoughts from the HDF5 team about if H5Eget_msg() and
H5Eget_class_name() should work as illustrated in User's Guide Section
9.4.7? Meaning calling them would not reset the error stack.

On Fri, Oct 30, 2015 at 3:40 PM, Jason Newton <nev...@gmail.com> wrote:

> H5Eget_msg sounds like it should not clear the stack or have any side
> effect whatsoever.  Is there a technical reason why it calls the
> FUNC_ENTER_API macro?
>
> -Jason
>
> On Fri, Oct 30, 2015 at 6:32 PM, David <l...@aue.org> wrote:
>
>>
>> H5Eget_msg() uses the FUNC_ENTER_API(FAIL) macro on entrance which clears
>> the error stack.
>>
>> Interestingly the deprecated functions H5Eget_major() and H5Eget_minor()
>> uses FUNC_ENTER_API_NOCLEAR(NULL) instead which preserves the error stack.
>>
>> In the manual Section 9.4.7, "Traverse an Error Stack with a Callback
>> Function" the example code uses H5Eget_msg() as though the stack is not
>> cleared which of course fails under the current implementation. Might it be
>> that at one point the intention was to have H5Eget_msg() not clear the
>> error stack so that using it in the callback for H5Ewalk() is possible? I
>> don't see any reasonable way to implement a walk callback without using the
>> deprecated functions instead.
>>
>> David
>>
>> On Fri, Oct 30, 2015 at 7:04 AM, Allen Byrne <b...@hdfgroup.org> wrote:
>>
>>> David and Martijn,
>>>
>>> We use these calls in our Java wrapper library (and execute tests) that
>>> implement what you need. See the exceptionImp.c file in our hdf-java
>>> repo.
>>> Also available at;
>>>     http://www.hdfgroup.org/products/java/release/download.html
>>>
>>> Martijn is correct about the error stack being reset, which is why you
>>> need to
>>> save the stack and restore it on calls that will reset the stack.
>>>
>>> Allen
>>>
>>>
>>> On Friday, October 30, 2015 02:35:04 PM Martijn Jasperse wrote:
>>> > Hi David,
>>> > I also encountered this issue. My understanding is that *any *call to
>>> an H5
>>> > function resets the error stack because in principle that call could
>>> > produce its own error [see, e.g. H5E.c:871]. Since H5get_msg succeeds,
>>> it
>>> > wipes the error stack, so error_desc becomes invalid.
>>> >
>>> > The solution I used was to store the error code and translate to
>>> messages
>>> > after traversing the stack. If there are better solutions I'd love to
>>> hear
>>> > them!
>>> >
>>> > Cheers,
>>> > Martijn
>>> >
>>> > On 30 October 2015 at 01:26, David <l...@aue.org> wrote:
>>> > > Hi,
>>> > >
>>> > > I cannot figure out how to get H5Ewalk() to work. I get a good
>>> > > looking H5E_error2_t struct on the first entrance to my callback
>>> function
>>> > > but after I call H5Eget_msg() the strings are gone. The subsequent
>>> calls
>>> > > to
>>> > > the callback all have bad strings too. I'm guessing they are getting
>>> > > freed from the heap and overwritten with debug mode "deleted" values
>>> but
>>> > > is
>>> > > that what's supposed to happen?
>>> > >
>>> > > I'm using hdf5-1.8.15-patch1 and MSVS10.
>>> > >
>>> > > Thanks,
>>> > > David
>>> > >
>>> > > #include <hdf5/hdf5.h>
>>> > > #include <stdio.h>
>>> > >
>>> > > herr_t callback(unsigned n, const H5E_error2_t *err_desc, void*
>>> > > client_data)
>>> > > {
>>> > >
>>> > >   printf(err_desc->func_name); // prints the function name
>>> > >
>>> > >     H5Eget_msg(err_desc->maj_num, NULL, NULL, 0);
>>> > >
>>> > >   printf(err_desc->func_name); // prints garbage
>>> > >   return 0;
>>> > >
>>> > > }
>>> > >
>>> > > int main(int argc, char* argv[])
>>> > > {
>>> > >
>>> > >   H5Fopen("missingfile", H5F_ACC_RDWR, H5P_DEFAULT);
>>> > >   H5Ewalk(H5E_DEFAULT, H5E_WALK_UPWARD, callback, NULL);
>>> > >   return 0;
>>> > >
>>> > > }
>>> > >
>>> > >
>>> > > _______________________________________________
>>> > > Hdf-forum is for HDF software users discussion.
>>> > > Hdf-forum@lists.hdfgroup.org
>>> > >
>>> http://lists.hdfgroup.org/mailman/listinfo/hdf-forum_lists.hdfgroup.org
>>> > > Twitter: https://twitter.com/hdf5
>>>
>>>
>>> _______________________________________________
>>> Hdf-forum is for HDF software users discussion.
>>> Hdf-forum@lists.hdfgroup.org
>>> http://lists.hdfgroup.org/mailman/listinfo/hdf-forum_lists.hdfgroup.org
>>> Twitter: https://twitter.com/hdf5
>>>
>>
>>
>> _______________________________________________
>> Hdf-forum is for HDF software users discussion.
>> Hdf-forum@lists.hdfgroup.org
>> http://lists.hdfgroup.org/mailman/listinfo/hdf-forum_lists.hdfgroup.org
>> Twitter: https://twitter.com/hdf5
>>
>
>
> _______________________________________________
> Hdf-forum is for HDF software users discussion.
> Hdf-forum@lists.hdfgroup.org
> http://lists.hdfgroup.org/mailman/listinfo/hdf-forum_lists.hdfgroup.org
> Twitter: https://twitter.com/hdf5
>
_______________________________________________
Hdf-forum is for HDF software users discussion.
Hdf-forum@lists.hdfgroup.org
http://lists.hdfgroup.org/mailman/listinfo/hdf-forum_lists.hdfgroup.org
Twitter: https://twitter.com/hdf5

Reply via email to