[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [MiNT] strange memory violation



søn, 06,.11.2005 kl. 12.08 +0100, skrev Konrad Kokoszkiewicz:
> > after this, Toswin was still active (just desktop.prg was killed, so 
> > I've tried it from this)
> > memory violation, type: private, PC: 1112c3c, Addr: 1a9a2be, test killed
> > 
> > after restart, I've tried it from gdb:
> > memory violation, type: private, PC: 1c922be, Addr: 1c922be, gdb(!) killed
> > memory violation, type: free, PC: 1112c3c, Addr: 18da2be, test killed 
> > (yeah, two memory violations at once)
> > 
> > Could me someone tell, what I'm doing wrong?
> 
> You are doing wrong one thing: everything.

 And then some!

> 
> You're grabbing an interrupt vector and it points to your program. This is a 
> timer interrupt and it occurs asynchronously to task switches, so it occurs even 
> when your program does not run (it is waiting for its turn to run). The memory 
> that belong to your program is NOT ACCESSIBLE AT THAT TIME. But the timer 
> interrupt code tries to access it. So the current process gets bus errors, 
> naturally.
> 
> First of all, you should never ever make an interrupt vector point to your user 
> application. This is unsafe. When the application somehow crashes and exits 
> behind your control, its memory becomes invalid, and the next interrupt you had 
> grabbed will instantly bring the system down.
> 
> Second, you must mark your program Supervisor-protected to avoid bus errors.
> 
> Third, MiNT systems will never be stable if such style of programming doesn't 
> become exstinct once for good.

 And I second this more than I can express! This kind of programming is
just plain unacceptable! Please read up on how to write clean programs!
Sorry to say, I'm extremely not, _not_, _NOT!_ interested in seeing such
software on MiNT.



 Best Regards,
Odd Skancke