Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 21 Sep 1995 06:39:46 -0700
From:      David Greenman <davidg@Root.COM>
To:        Bruce Evans <bde@freefall.freebsd.org>
Cc:        cvs-bin@freefall.freebsd.org, CVS-commiters@freefall.freebsd.org
Subject:   Re: cvs commit: src/bin/sh jobs.c 
Message-ID:  <199509211339.GAA00413@corbin.Root.COM>
In-Reply-To: Your message of "Thu, 21 Sep 95 06:24:22 PDT." <199509211324.GAA05821@freefall.freebsd.org> 

next in thread | previous in thread | raw e-mail | index | archive | help
>bde         95/09/21 06:24:21
>
>  Modified:    bin/sh    jobs.c
>  Log:
>  Fix relocation of job table.
>  
>  	while { sleep 1 & wait; } do echo 1; done
>  
>  corrupted the job table every 4th iteration.

   Hmmm...

***************
*** 459,465 ****
--- 459,472 ----
                        if (njobs == 0) {
                                jobtab = ckmalloc(4 * sizeof jobtab[0]);
                        } else {
+                               struct job *ojp;
+ 
                                jp = ckmalloc((njobs + 4) * sizeof jobtab[0]);
+                               for (i = njobs, ojp = jobtab; --i >= 0;
+                                    jp++, ojp++)
+                                       if (ojp->ps == &ojp->ps0)
+                                               ojp->ps = &jp->ps0;
+                               jp -= njobs;
                                bcopy(jobtab, jp, njobs * sizeof jp[0]);
                                ckfree(jobtab);
                                jobtab = jp;

   I'm concerned by what you're doing with 'jp' above. How is free() going to
be able to free this after you've changed the address that was returned by
malloc (jp -= njobs)?

-DG



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199509211339.GAA00413>