[GRASS-dev] Rast_get_row thread safe

Hi

Is this call thread safe?

Rast_get_row(fds[j], rowbuf, row, maptype);

I've been getting error while trying to put it in an OpenMP loop:

Also same question about this two calls:

ptr = G_incr_void_ptr(ptr, Rast_cell_size(maptype));
maptype = Rast_get_map_type(fds[j]);

Thanks,
Peng

Peng Du wrote:

Is this call thread safe?

Rast_get_row(fds[j], rowbuf, row, maptype);

I've been getting error while trying to put it in an OpenMP loop:

It should be safe to have multiple concurrent Rast_get_row() calls
provided that they refer to different maps. I put some effort into
fixing this issue for the multi-threaded r.mapcalc. Of course, it's
always possible that I overlooked something.

It definitely isn't safe to have multiple concurrent Rast_get_row()
calls for different rows within the same map.

Also, any multi-threaded code should call G_init_all() and
Rast_init_all() before creating additional threads, in order to
prevent race conditions with first-use initialisation.

Also same question about this two calls:

ptr = G_incr_void_ptr(ptr, Rast_cell_size(maptype));
maptype = Rast_get_map_type(fds[j]);

These are both safe.

--
Glynn Clements <glynn@gclements.plus.com>