[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Two Patches for MiNT 1.09
Hi!
There is a small bug in proc.c: when the system runs out of kernel
memory while allocating memory for a fork()ed processes' region map,
duplicated FILEPTRs and cookies are not released; moving the memory
allocation code up a few lines should cure the problem:
*** o:\proc.c Wed Aug 18 20:16:34 1993
--- proc.c Wed Aug 18 22:00:04 1993
***************
*** 122,127 ****
--- 122,140 ----
p->usrtime = p->systime = p->chldstime = p->chldutime = 0;
+ /* allocate space for memory regions, to be filled later */
+ p->mem = (MEMREGION **) kmalloc(p->num_reg * SIZEOF(MEMREGION *));
+ if (!p->mem) {
+ dispose_proc(p);
+ goto nomem;
+ }
+ p->addr = (virtaddr *)kmalloc(p->num_reg * SIZEOF(virtaddr));
+ if (!p->addr) {
+ kfree(p->mem);
+ dispose_proc(p);
+ goto nomem;
+ }
+
/* copy open handles */
for (i = MIN_HANDLE; i < MAX_OPEN; i++) {
if ((f = p->handle[i]) != 0) {
***************
*** 149,166 ****
p->searches = 0;
/* copy memory */
- p->mem = (MEMREGION **) kmalloc(p->num_reg * SIZEOF(MEMREGION *));
- if (!p->mem) {
- dispose_proc(p);
- goto nomem;
- }
- p->addr = (virtaddr *)kmalloc(p->num_reg * SIZEOF(virtaddr));
- if (!p->addr) {
- kfree(p->mem);
- dispose_proc(p);
- goto nomem;
- }
-
for (i = 0; i < curproc->num_reg; i++) {
p->mem[i] = curproc->mem[i];
if (p->mem[i] != 0)
--- 162,167 ----
Another (small) problem in dosound() (xbios.c): when it is compiled
with Pure C, the #&$$@6"6$& optimizer silently removes the statement
"(void)(*((volatile char *)ptr));".
A simple patch should fix this:
*** o:\xbios.c Wed Aug 18 20:16:50 1993
--- xbios.c Mon Aug 23 19:43:06 1993
***************
*** 269,275 ****
if (!no_mem_prot && ((long)ptr >= 0)) {
/* check that this process has access to the memory */
/* (if not, the next line will cause a bus error) */
! (void)(*((volatile char *)ptr));
/* OK, now make sure that interrupt routines will have access,
* too
--- 269,276 ----
if (!no_mem_prot && ((long)ptr >= 0)) {
/* check that this process has access to the memory */
/* (if not, the next line will cause a bus error) */
! char dummy = (*((volatile char *)ptr));
! UNUSED(dummy) ;
/* OK, now make sure that interrupt routines will have access,
* too
--
Martin Koehling | mk@anuurn.do.open.de | Martin_Koehling@un.maus.ruhr.de