<div dir="ltr">Martin,<div><br></div><div>Even after defining error handlers, we still need to call G_fatal_error to trigger them. The Vect_set_error_handler_io manual recommends to use this routine after Vect_open_old* because it needs the point to In and Out, but if Vect_open_old* fails and doesn't call G_fatal_error, at what point, can we call fatal error without checking their return value?</div>
<div><br></div><div>G_add_error_handler is a good way to do a cleanup, but, IMHO, it doesn't eliminate the need for checking Vect_open_* return value completely because of the above reason as long as they don't call G_fatal_error internally. But again, when they call fatal error internally, they don't have pointers to maps. It would be great if we could keep track of opened raster/vector maps and properly close existing maps and delete unfinished new maps inside G_fatal_error. And use G_add_error_handler to do a non-map related cleanup.</div>
<div><br></div><div>Huidae</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Sun, May 4, 2014 at 2:52 PM, Martin Landa <span dir="ltr"><<a href="mailto:landa.martin@gmail.com" target="_blank">landa.martin@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi,<br>
<br>
2014-05-04 16:16 GMT+02:00 Huidae Cho <<a href="mailto:grass4u@gmail.com">grass4u@gmail.com</a>>:<br>
> I agree that it's not fun to call fatal error whenever opening something, so<br>
> I thought about adding fatal error in Vect routines. But some modules<br>
> actually check its return value and do cleaning before exit. Another option<br>
<br>
please note that cleaning should be implemented as error handlers [1],<br>
vector [2] and db [3] libs have defined standardized (often used)<br>
error handlers. Martin<br>
<br>
[1] <a href="http://grass.osgeo.org/programming7/gis_2handler_8c.html#aa01633c78dd9561c740e4a89e33ad80c" target="_blank">http://grass.osgeo.org/programming7/gis_2handler_8c.html#aa01633c78dd9561c740e4a89e33ad80c</a><br>
[2] <a href="http://grass.osgeo.org/programming7/vector_2Vlib_2handler_8c.html#aa692177b1d99fdcb7c982b8a64889263" target="_blank">http://grass.osgeo.org/programming7/vector_2Vlib_2handler_8c.html#aa692177b1d99fdcb7c982b8a64889263</a><br>

[3] <a href="http://grass.osgeo.org/programming7/db_2dbmi__client_2handler_8c.html#a67d9435f4187f1119e1a29b60efdb71b" target="_blank">http://grass.osgeo.org/programming7/db_2dbmi__client_2handler_8c.html#a67d9435f4187f1119e1a29b60efdb71b</a><br>

</blockquote></div><br></div>