On Tue, 8 Feb 2011, Matt wrote:
> Hey all,
>
> I've got a great riddle for you today. (Long story short, can you run
> the test code included below to completion on your machine?) I've
> already filed a bug report, but I want to see if other people can
> reproduce these errors.
>
> I'm experiencing machine/version-dependent, non-deterministic behavior
> that seems to present itself orthogonal to the triggering mechanism.
> In other words, I've got a crazy-making problem.
>
> I experienced this in working code, but through patient debugging,
> I've pared this down my until I've got a relatively small program that
> demonstrates the problem behavior.
>
> The undesirable behavior is a NCDF_OPEN error (NC_ERROR=-31) after
> some *random* number of open/close iterations on a netcdf file that
> was created with IDL (or possibly a segfault core dump on other
> machines.). The second feature is that I don't see this behavior
> until I make an x-connection of some sort (window, /free, or even a
> "device, depth=depth" will cause errors)
>
> Machine 1: (only has idl 7.0.1 64bit installed)
> savoie@snow:~/tmp> uname -a
> Linux snow 2.6.27.54-0.2-default #1 SMP 2010-10-19 18:40:07 +0200
> x86_64 x86_64 x86_64 GNU/Linux
>
> Machine 2 (fails with 32 bit idl7.0.1 & idl6.4):
> savoie@snowblower:~/tmp> uname -a
> Linux snowblower 2.6.34.7-0.5-default #1 SMP 2010-10-25 08:40:12 +0200
> i686 i686 i386 GNux
>
>
> All the code does is open and close a netcdf file, many, many times.
> But after an x-connection (via "window, /free"), the code errors out
> at a different spot in the iteration.
>
>
> Below is the output I get on the problem machines and below that, the
> source code for you to try at home. For extra credit, modify the code
> to open a netcdf file created with a different program than IDL, NCO
> for example.
>
>
> --OUTPUT--------------------------------------
> savoie@snow:~/tmp> idl70
> IDL Version 7.0.1 (linux x86_64 m64). (c) 2008, ITT Visual Information
> Solutions
> Installation number: 100-431.
> Licensed for use by: University of Colorado
>
> IDL> .run ./crash_ncdf.pro
> % Compiled module: CREATE_HAND_SAMPLE.
> % Compiled module: CRASH_NCDF.
> IDL> crash_ncdf
> % Loaded DLM: NCDF.
> Successfully completed first iterations
> i = 143017
> ncdf_fid = 5
> % CRASH_NCDF: NCDF_OPEN: Unable to open the file "/projects/NRTSI-G/
> tmp_crashing_ncdf/sample_h
> and.nc".
> (NC_ERROR=-31)
> % Execution halted at: CRASH_NCDF 44 /homes/snowblower/savoie/
> tmp/crash_ncdf.pro
> % $MAIN$
>
> ----------------------------------------
> Sample Test Code:
> ----------------------------------------
> ;+============================================
> ; :Author: Matt Savoie <savoie@nsidc.org>
> ; :Copyright: (C) <2011> University of Colorado.
> ; :Version: $Id:$
> ;
> ; Created 02/03/2011
> ; National Snow & Ice Data Center, University of Colorado, Boulder
> ;-============================================*/
>
> ;+
> ; Generate a very simple netcdf file.
> ;-
> pro create_hand_sample, file
> compile_opt idl2, logical_predicate
>
> sample_var = dindgen( 4, 3 )
> ncid = ncdf_create( file, /CLOBBER )
> dimidx = ncdf_dimdef( ncid, 'x', 4 )
> dimidy = ncdf_dimdef( ncid, 'y', 3 )
> varid = ncdf_vardef( ncid, 'variable', /double )
> ncdf_control, ncid, /ENDEF
> ncdf_varput, ncid, varid, sample_var
> ncdf_close, ncid
>
> end
>
>
> ;+
> ; This is just a sample looping program that shows a problem
> ; Opening and Closing a single netcdf file many times.
> ;-
> pro crash_ncdf
> compile_opt idl2, logical_predicate
>
> catch, theError
> if theError ne 0 then begin
> Catch, /cancel
> print, "i = ", i
> print, "ncdf_fid = ", ncdf_fid
> message, !ERROR_STATE.msg
> endif
>
>
> file = './sample.nc'
> create_hand_sample, file
>
> long_iteration = 1900000L
>
> for i = 0l, long_iteration do begin
> ncdf_fid = ncdf_open( file, write = 0 )
> ncdf_close, ncdf_fid
> endfor
>
> print, 'Successfully completed first iterations'
> window, /free
> wdelete
>
> for i = 0l, long_iteration do begin
> ncdf_fid = ncdf_open( file, write = 0 )
> ncdf_close, ncdf_fid
> endfor
>
> print, 'Successfully completed second iterations'
>
> end
>
linux x86_64:
IDL 7.0 (64 bit) fails
IDL 6.4 (64 bit) succeeds
regards,
Lajos
ps: you are defining a scalar variable, not an array
> sample_var = dindgen( 4, 3 )
> ncid = ncdf_create( file, /CLOBBER )
> dimidx = ncdf_dimdef( ncid, 'x', 4 )
> dimidy = ncdf_dimdef( ncid, 'y', 3 )
> varid = ncdf_vardef( ncid, 'variable', /double )
> ncdf_control, ncid, /ENDEF
> ncdf_varput, ncid, varid, sample_var
> ncdf_close, ncid
|