[gdal-dev] some problem in python bindings
Ari Jolma
ari.jolma at gmail.com
Fri May 21 02:09:53 EDT 2010
Howard Butler wrote:
> On May 20, 2010, at 7:48 AM, Vincent Schut wrote:
>
>> svn and I don't remember this happening earlier), there is a problem with the python swig bindings when doing this:
>>
>> data = gdal_array.BandReadAsArray(gdal.Open(filename).GetRasterBand(1))
>>
> This is a consequence of the Python bindings historically expecting users to manage their own memory. If operation chaining such as the first one works, it's a happy circumstance, but don't expect it to work always or even in most cases. As to whether or not we fix it, I think yes, we'll take a patch if it's proven to work.
>
The Perl bindings take care of this by maintaining within Dataset class
a global variable (hash) BANDS, which keeps alive all dataset objects
that have alive band objects. In the destructor of the Band class the
entry of the band object is deleted from the above hash and thus the
dataset object may also be released. Thus code like
$data = Geo::GDAL::Open($filename)->GetRasterBand(1)->ReadTile;
for (@$data) {
print "@$_\n";
}
does not cause a segfault. (The above code prints out all the contents
of the band)
I try very hard to make it impossible to cause a segfault with GDAL Perl
bindings as they are a major inconvenience for users and developers.
Even a bad error message is much better.
Ari
More information about the gdal-dev
mailing list