<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<p>Is there any way to know whether this is a GDALComputedDataset if
everything I have is a GDALDataset pointer? </p>
<div class="moz-cite-prefix">On 24/10/2025 12:55, Even Rouault
wrote:<br>
</div>
<blockquote type="cite"
cite="mid:36b2649b-ff1f-4e7a-97e2-f0afe1f6f142@spatialys.com">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<p>Hi,</p>
<p>you should not destroy the dataset of a GDALComputedRasterBand.
The GDALComputedRasterBand destructor does that automatically.</p>
<p>Even<br>
</p>
<div class="moz-cite-prefix">Le 24/10/2025 à 12:40, Momtchil
Momtchev via gdal-dev a écrit :<br>
</div>
<blockquote type="cite"
cite="mid:ca1ad9f2-6ee1-435e-aae5-0c995fb09ca6@momtchev.com">
<meta http-equiv="content-type"
content="text/html; charset=UTF-8">
<p>I have modified one of the algebra examples as follows:</p>
<div
style="color: #cccccc;background-color: #1f1f1f;font-family: Cascadia Code, Menlo, Monaco, 'Courier New', monospace, Menlo, Monaco, 'Courier New', monospace;font-weight: normal;font-size: 12px;line-height: 18px;white-space: pre;"><div><span
style="color: #c586c0;">#include</span><span
style="color: #569cd6;"> </span><span style="color: #ce9178;"><gdal_priv.h></span></div>
<div><span style="color: #569cd6;">int</span><span
style="color: #cccccc;"> </span><span style="color: #dcdcaa;">main</span><span
style="color: #cccccc;">() {</span></div><div><span
style="color: #cccccc;"> </span><span style="color: #dcdcaa;">GDALAllRegister</span><span
style="color: #cccccc;">();</span></div>
<div><span style="color: #cccccc;"> </span><span
style="color: #569cd6;">auto</span><span style="color: #cccccc;"> </span><span
style="color: #9cdcfe;">poDS</span><span style="color: #cccccc;"> </span><span
style="color: #d4d4d4;">=</span><span style="color: #cccccc;"> </span><span
style="color: #4ec9b0;">std</span><span style="color: #cccccc;">::</span><span
style="color: #4ec9b0;">unique_ptr</span><span
style="color: #cccccc;"><</span><span style="color: #4ec9b0;">GDALDataset</span><span
style="color: #cccccc;">>(</span><span
style="color: #4ec9b0;">GDALDataset</span><span
style="color: #cccccc;">::</span><span style="color: #dcdcaa;">Open</span><span
style="color: #cccccc;">(</span><span style="color: #ce9178;">"test/data/a39se10.jpg"</span><span
style="color: #cccccc;">));</span></div><div><span
style="color: #cccccc;"> </span><span style="color: #569cd6;">auto</span><span
style="color: #cccccc;"> </span><span style="color: #d4d4d4;">&</span><span
style="color: #9cdcfe;">R</span><span style="color: #cccccc;"> </span><span
style="color: #d4d4d4;">=</span><span style="color: #cccccc;"> </span><span
style="color: #d4d4d4;">*</span><span style="color: #cccccc;">(</span><span
style="color: #9cdcfe;">poDS</span><span style="color: #dcdcaa;">-></span><span
style="color: #dcdcaa;">GetRasterBand</span><span
style="color: #cccccc;">(</span><span style="color: #b5cea8;">1</span><span
style="color: #cccccc;">));</span></div><div><span
style="color: #cccccc;"> </span><span style="color: #569cd6;">auto</span><span
style="color: #cccccc;"> </span><span style="color: #d4d4d4;">&</span><span
style="color: #9cdcfe;">G</span><span style="color: #cccccc;"> </span><span
style="color: #d4d4d4;">=</span><span style="color: #cccccc;"> </span><span
style="color: #d4d4d4;">*</span><span style="color: #cccccc;">(</span><span
style="color: #9cdcfe;">poDS</span><span style="color: #dcdcaa;">-></span><span
style="color: #dcdcaa;">GetRasterBand</span><span
style="color: #cccccc;">(</span><span style="color: #b5cea8;">2</span><span
style="color: #cccccc;">));</span></div><div><span
style="color: #cccccc;"> </span><span style="color: #569cd6;">auto</span><span
style="color: #cccccc;"> </span><span style="color: #d4d4d4;">&</span><span
style="color: #9cdcfe;">B</span><span style="color: #cccccc;"> </span><span
style="color: #d4d4d4;">=</span><span style="color: #cccccc;"> </span><span
style="color: #d4d4d4;">*</span><span style="color: #cccccc;">(</span><span
style="color: #9cdcfe;">poDS</span><span style="color: #dcdcaa;">-></span><span
style="color: #dcdcaa;">GetRasterBand</span><span
style="color: #cccccc;">(</span><span style="color: #b5cea8;">3</span><span
style="color: #cccccc;">));</span></div><div><span
style="color: #cccccc;"> </span><span style="color: #4ec9b0;">GDALRasterBand</span><span
style="color: #cccccc;"> </span><span style="color: #d4d4d4;">*</span><span
style="color: #9cdcfe;">graylevel</span><span
style="color: #cccccc;"> </span><span style="color: #d4d4d4;">=</span><span
style="color: #cccccc;"> </span><span style="color: #c586c0;">new</span><span
style="color: #cccccc;"> </span><span style="color: #4ec9b0;">GDALComputedRasterBand</span><span
style="color: #cccccc;">((</span><span style="color: #b5cea8;">0.299</span><span
style="color: #cccccc;"> </span><span style="color: #dcdcaa;">*</span><span
style="color: #cccccc;"> </span><span style="color: #9cdcfe;">R</span><span
style="color: #cccccc;"> </span><span style="color: #dcdcaa;">+</span><span
style="color: #cccccc;"> </span><span style="color: #b5cea8;">0.587</span><span
style="color: #cccccc;"> </span><span style="color: #dcdcaa;">*</span><span
style="color: #cccccc;"> </span><span style="color: #9cdcfe;">G</span><span
style="color: #cccccc;"> </span><span style="color: #dcdcaa;">+</span><span
style="color: #cccccc;"> </span><span style="color: #b5cea8;">0.114</span><span
style="color: #cccccc;"> </span><span style="color: #dcdcaa;">*</span><span
style="color: #cccccc;"> </span><span style="color: #9cdcfe;">B</span><span
style="color: #cccccc;">).</span><span style="color: #dcdcaa;">AsType</span><span
style="color: #cccccc;">(</span><span style="color: #4fc1ff;">GDT_Byte</span><span
style="color: #cccccc;">));</span></div>
<div><span style="color: #cccccc;"> </span><span
style="color: #569cd6;">auto</span><span style="color: #cccccc;"> </span><span
style="color: #9cdcfe;">poGTiffDrv</span><span
style="color: #cccccc;"> </span><span style="color: #d4d4d4;">=</span><span
style="color: #cccccc;"> </span><span style="color: #dcdcaa;">GetGDALDriverManager</span><span
style="color: #cccccc;">()-></span><span
style="color: #dcdcaa;">GetDriverByName</span><span
style="color: #cccccc;">(</span><span style="color: #ce9178;">"GTiff"</span><span
style="color: #cccccc;">);</span></div><div><span
style="color: #cccccc;"> </span><span style="color: #4ec9b0;">std</span><span
style="color: #cccccc;">::</span><span style="color: #4ec9b0;">unique_ptr</span><span
style="color: #cccccc;"><</span><span style="color: #4ec9b0;">GDALDataset</span><span
style="color: #cccccc;">>(</span></div><div><span
style="color: #cccccc;"> </span><span style="color: #9cdcfe;">poGTiffDrv</span><span
style="color: #cccccc;">-></span><span
style="color: #dcdcaa;">CreateCopy</span><span
style="color: #cccccc;">(</span><span style="color: #ce9178;">"graylevel.tif"</span><span
style="color: #cccccc;">, </span><span style="color: #9cdcfe;">graylevel</span><span
style="color: #cccccc;">-></span><span
style="color: #dcdcaa;">GetDataset</span><span
style="color: #cccccc;">(), </span><span style="color: #569cd6;">false</span><span
style="color: #cccccc;">, </span><span style="color: #569cd6;">nullptr</span><span
style="color: #cccccc;">, </span><span style="color: #569cd6;">nullptr</span><span
style="color: #cccccc;">, </span><span style="color: #569cd6;">nullptr</span><span
style="color: #cccccc;">))</span></div><div><span
style="color: #cccccc;"> .</span><span
style="color: #dcdcaa;">reset</span><span
style="color: #cccccc;">();</span></div>
<div><span style="color: #cccccc;"> </span><span
style="color: #4ec9b0;">GDALDataset</span><span
style="color: #cccccc;"> </span><span style="color: #d4d4d4;">*</span><span
style="color: #9cdcfe;">dh</span><span style="color: #cccccc;"> </span><span
style="color: #d4d4d4;">=</span><span style="color: #cccccc;"> </span><span
style="color: #9cdcfe;">graylevel</span><span
style="color: #cccccc;">-></span><span
style="color: #dcdcaa;">GetDataset</span><span
style="color: #cccccc;">();</span></div><div><span
style="color: #cccccc;"> </span><span style="color: #c586c0;">delete</span><span
style="color: #cccccc;"> </span><span style="color: #9cdcfe;">graylevel</span><span
style="color: #cccccc;">;</span></div><div><span
style="color: #cccccc;"> </span><span style="color: #9cdcfe;">dh</span><span
style="color: #cccccc;">-></span><span
style="color: #dcdcaa;">Close</span><span
style="color: #cccccc;">();</span></div><div><span
style="color: #cccccc;"> </span><span style="color: #c586c0;">return</span><span
style="color: #cccccc;"> </span><span style="color: #b5cea8;">0</span><span
style="color: #cccccc;">;</span></div><div><span
style="color: #cccccc;">}</span></div></div>
<p>I allocate graylevel on the heap, I obtain a pointer to the
GDALComputedDataset and I attempt to destroy first the
GDALComputedRasterBand then the GDALComputedDataset. This
fails with a crash in Close. Is this a bug or am I not
supposed to do this? I am doing it, because this is the usual
chain of destruction events for objects returned to JS.
RasterBands hold a reference to their Dataset in order to
prevent the object from being GCed.</p>
<pre class="moz-signature" cols="72">--
Momtchil Momtchev <a class="moz-txt-link-rfc2396E"
href="mailto:momtchil@momtchev.com" moz-do-not-send="true"><momtchil@momtchev.com></a></pre>
<br>
<fieldset class="moz-mime-attachment-header"></fieldset>
<pre class="moz-quote-pre" wrap="">_______________________________________________
gdal-dev mailing list
<a class="moz-txt-link-abbreviated moz-txt-link-freetext"
href="mailto:gdal-dev@lists.osgeo.org" moz-do-not-send="true">gdal-dev@lists.osgeo.org</a>
<a class="moz-txt-link-freetext"
href="https://lists.osgeo.org/mailman/listinfo/gdal-dev"
moz-do-not-send="true">https://lists.osgeo.org/mailman/listinfo/gdal-dev</a>
</pre>
</blockquote>
<pre class="moz-signature" cols="72">--
<a class="moz-txt-link-freetext" href="http://www.spatialys.com"
moz-do-not-send="true">http://www.spatialys.com</a>
My software is free, but my time generally not.</pre>
</blockquote>
<pre class="moz-signature" cols="72">--
Momtchil Momtchev <a class="moz-txt-link-rfc2396E" href="mailto:momtchil@momtchev.com"><momtchil@momtchev.com></a></pre>
</body>
</html>