ncdf + x-connection + many files = crazy. [message #74933] |
Tue, 08 February 2011 12:37  |
Matt[2]
Messages: 69 Registered: March 2007
|
Member |
|
|
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
|
|
|