[Oberon] ETH Oberon/Gadgets: System Freeze in unloading
Douglas G. Danforth
danforth at greenwoodfarm.com
Wed Aug 21 16:32:59 CEST 2002
Felix Friedrich wrote:
>
> Hi Patrick
>
> >However, in several years of working with Oberon, I have only found three
> >ways to produce C-like system freezes
> >apart from using the unsafe SYSTEM feature:
> >A) calling C programs from within Oberon
> >B) passing very large arrays as value parameters in procedure headings
> >C) unloading modules whereby some visual gadget is still hanging around
> >somewhere, as mentioned above.
> >I feel system stability is a prominent one of the many highlights of
> >Oberon, so the points B and C hurt the more...
>
> I agree. By the way problem B) occurs because the max stacksize of an
> Oberon.Thread (in Windows) is approx. like 100kB. I have increased that
> value to 1MB in my threads, but anyway, the best "solution" is to take
> VAR-pars or Pointers. As far as I know, in Windows-Oberon it is a
> Windows-Problem, since the Windows-thread crashes when the size of the
> stack is too small. Maybe there should be some built in range-check for the
> stack in Oberon. (possible?)
> Do you see a solution for C) ?
I would think the simplest solution would be to tie a visual
gadget to the module that created it. Freeing of that module
could then not occur as long as an instance of the gadget
occured anywhere.
Its been a while since I looked at how gadgets are implemented
and am a little surprised by this thread. Every visual instance
should have a pointer associated with it and hence memory allocated.
Kill the visual instance=> kill the pointer (mark it for garbage
collection) and kill the pointer=>kill (remove) the visual instance.
Why isn't this done?
-Doug
More information about the Oberon
mailing list