You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							127 lines
						
					
					
						
							3.9 KiB
						
					
					
				
			
		
		
	
	
							127 lines
						
					
					
						
							3.9 KiB
						
					
					
				| # --- SDE-COPYRIGHT-NOTE-BEGIN --- | |
| # This copyright note is auto-generated by ./scripts/Create-CopyPatch. | |
| # | |
| # Filename: package/.../make/0002-fix-stack-limit.patch | |
| # Copyright (C) 2010 The OpenSDE Project | |
| # | |
| # More information can be found in the files COPYING and README. | |
| # | |
| # This patch file is dual-licensed. It is available under the license the | |
| # patched project is licensed under, as long as it is an OpenSource license | |
| # as defined at http://www.opensource.org/ (e.g. BSD, X11) or under the terms | |
| # of the GNU General Public License as published by the Free Software | |
| # Foundation; either version 2 of the License, or (at your option) any later | |
| # version. | |
| # --- SDE-COPYRIGHT-NOTE-END --- | |
|  | |
| bug #22010: The increased stack rlimit is inherited by the subprocesses to make. | |
| http://savannah.gnu.org/bugs/?22010 | |
| http://cvs.savannah.gnu.org/viewvc/make/make.h?root=make&r1=1.132&r2=1.133&view=patch | |
| http://cvs.savannah.gnu.org/viewvc/make/main.c?root=make&r1=1.228&r2=1.229&view=patch | |
| http://cvs.savannah.gnu.org/viewvc/make/job.c?root=make&r1=1.191&r2=1.192&view=patch | |
|  | |
| 2009-06-07  Paul Smith  <[email protected]> | |
| 	* make.h: Move SET_STACK_SIZE determination to make.h. | |
| 	* main.c (main): New global variable, STACK_LIMIT, holds the | |
| 	original stack limit when make was started. | |
| 	* job.c (start_job_command): Reset the stack limit, if we changed it. | |
| 	Fixes Savannah bug #22010. | |
|  | |
| diff --git a/job.c b/job.c | |
| index 3251efe..7fe08fa 100644 | |
| --- a/job.c | |
| +++ b/job.c | |
| @@ -1275,6 +1275,12 @@ start_job_command (struct child *child) | |
|            if (job_rfd >= 0) | |
|              close (job_rfd); | |
|   | |
| +#ifdef SET_STACK_SIZE | |
| +          /* Reset limits, if necessary.  */ | |
| +          if (stack_limit.rlim_cur) | |
| +            setrlimit (RLIMIT_STACK, &stack_limit); | |
| +#endif | |
| + | |
|  	  child_execute_job (child->good_stdin ? 0 : bad_stdin, 1, | |
|                               argv, child->environment); | |
|  	} | |
| @@ -2237,7 +2243,7 @@ construct_command_argv_internal (char *line, char **restp, char *shell, | |
|  				 "for", "case", "if", ":", ".", "break", | |
|  				 "continue", "export", "read", "readonly", | |
|  				 "shift", "times", "trap", "switch", "unset", | |
| -                                 0 }; | |
| +                                 "ulimit", 0 }; | |
|   | |
|    char *sh_chars; | |
|    char **sh_cmds; | |
| diff --git a/main.c b/main.c | |
| index 483babf..42964e0 100644 | |
| --- a/main.c | |
| +++ b/main.c | |
| @@ -44,14 +44,6 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.  */ | |
|  # include <fcntl.h> | |
|  #endif | |
|   | |
| -#if defined(HAVE_SYS_RESOURCE_H) && defined(HAVE_GETRLIMIT) && defined(HAVE_SETRLIMIT) | |
| -# define SET_STACK_SIZE | |
| -#endif | |
| - | |
| -#ifdef SET_STACK_SIZE | |
| -# include <sys/resource.h> | |
| -#endif | |
| - | |
|  #ifdef _AMIGA | |
|  int __stack = 20000; /* Make sure we have 20K of stack space */ | |
|  #endif | |
| @@ -213,6 +205,13 @@ int print_version_flag = 0; | |
|   | |
|  static struct stringlist *makefiles = 0; | |
|   | |
| +/* Size of the stack when we started.  */ | |
| + | |
| +#ifdef SET_STACK_SIZE | |
| +struct rlimit stack_limit; | |
| +#endif | |
| + | |
| + | |
|  /* Number of job slots (commands that can be run at once).  */ | |
|   | |
|  unsigned int job_slots = 1; | |
| @@ -919,11 +918,15 @@ main (int argc, char **argv, char **envp) | |
|      struct rlimit rlim; | |
|   | |
|      /* Set the stack limit huge so that alloca does not fail.  */ | |
| -    if (getrlimit (RLIMIT_STACK, &rlim) == 0) | |
| +    if (getrlimit (RLIMIT_STACK, &rlim) == 0 | |
| +        && rlim.rlim_cur > 0 && rlim.rlim_cur < rlim.rlim_max) | |
|        { | |
| +        stack_limit = rlim; | |
|          rlim.rlim_cur = rlim.rlim_max; | |
|          setrlimit (RLIMIT_STACK, &rlim); | |
|        } | |
| +    else | |
| +      stack_limit.rlim_cur = 0; | |
|    } | |
|  #endif | |
|   | |
| diff --git a/make.h b/make.h | |
| index 994f4f2..25c2bef 100644 | |
| --- a/make.h | |
| +++ b/make.h | |
| @@ -378,6 +378,14 @@ extern int no_default_sh_exe; | |
|  extern int unixy_shell; | |
|  #endif  /* WINDOWS32 */ | |
|   | |
| +#if defined(HAVE_SYS_RESOURCE_H) && defined(HAVE_GETRLIMIT) && defined(HAVE_SETRLIMIT) | |
| +# define SET_STACK_SIZE | |
| +#endif | |
| +#ifdef SET_STACK_SIZE | |
| +# include <sys/resource.h> | |
| +struct rlimit stack_limit; | |
| +#endif | |
| + | |
|  struct floc | |
|    { | |
|      const char *filenm; | |
| --  | |
| 1.6.5.3 | |
| 
 | |
| 
 |