Re: TV bug (memory?) under Solaris 2.4 [message #5436 is a reply to message #5423] |
Tue, 19 December 1995 00:00   |
David S. Foster/Admin
Messages: 14 Registered: May 1995
|
Junior Member |
|
|
offenbrg@fondue.gsfc.nasa.gov (Joel D. Offenberg) wrote:
>
> Hi, all
>
> We have been encountering a bug under in IDL4.0.1 under Solaris 2.4
> when drawing images to the screen (i.e. doing a "TV" operation). What
> happens is this: IDL starts to draw the image, then draws a little garbage
> and then redraws a section of the image, then locks up and leaves the rest
> of the window blank. IDL is frozen at this point---CTRL-C does not work,
> and the only way out is to CTRL-Z and kill the session.
>
> This problem has appeared on Sun machines running Solaris 2.4, including
> Sparc2, Sparc10 and Sparc20 machines, all with between 32 and 48MB of RAM.
> Unfortunately, we upgraded from IDL 3.6 to 4.0 at almost the same time as we
> upgraded from SunOS 4.1 to Solaris2.4, so I don't know if this bug existed
> under IDL 3.6. I know we never saw it on IDL 3.6 under SunOS 4.1 |
Just FYI, we use Solaris 2.3 and IDL 4.0.1 and haven't had this
problem, so perhaps the OS is the problem. I've been told that
IDL 4.0.1 works fine under Solaris 2.5, which is supposed to be
less buggy. (Don't administrators LOVE doing OS upgrades?)
Also, we HAVE run into a bug (verified by IDL tech support as such)
in TVRD(), in which portions of the window are corrupted when its
contents are read into an array. This can happen when portions of
the window are not visible (iconified, obscured by another window,
or even if it is scrollable!), and is not corrected by changing
the behavior of BACKING_STORE. For anyone that cares, and is
experiencing this same problem (I know it occurs on other versions
of Solaris), here is a work-around:
FUNCTION safe_tvrd, draw_wid, xsize, ysize
on_error,2
old_window = !d.window
window, xsize=xsize, ysize=ysize, /free, /pixmap
widget_control, draw_wid, get_value=window
device, copy=[0,0,xsize, ysize, 0, 0, window] ; Copy into pixmap
image = tvrd() ; Read pixmap into array
wdelete, !d.window
if (old_window ne -1) then $
wset, old_window
return, image
END
You could modify this to work on specified portions of the window.
Dave Foster
foster@bial6.ucsd.edu
"People don't grow up, they just use bigger words."
|
|
|