RLIMIT_NPROC impl for non-linux
This commit is contained in:
		
							parent
							
								
									2e5bc87f49
								
							
						
					
					
						commit
						76260ce6f3
					
				
							
								
								
									
										26
									
								
								src/sigar.c
									
									
									
									
									
								
							
							
						
						
									
										26
									
								
								src/sigar.c
									
									
									
									
									
								
							@ -939,14 +939,12 @@ typedef struct {
 | 
				
			|||||||
    size_t max;
 | 
					    size_t max;
 | 
				
			||||||
} rlimit_field_t;
 | 
					} rlimit_field_t;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define RLIMIT_UNSUPPORTED (RLIM_NLIMITS+1)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifndef RLIMIT_RSS
 | 
					#ifndef RLIMIT_RSS
 | 
				
			||||||
#define RLIMIT_RSS RLIMIT_UNSUPPORTED
 | 
					#define RLIMIT_RSS (RLIM_NLIMITS+1)
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef RLIMIT_NPROC
 | 
					#ifndef RLIMIT_NPROC
 | 
				
			||||||
#define RLIMIT_NPROC RLIMIT_UNSUPPORTED
 | 
					#define RLIMIT_NPROC (RLIM_NLIMITS+2)
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static rlimit_field_t sigar_rlimits[] = {
 | 
					static rlimit_field_t sigar_rlimits[] = {
 | 
				
			||||||
@ -965,6 +963,9 @@ static rlimit_field_t sigar_rlimits[] = {
 | 
				
			|||||||
#define RlimitScale(val) \
 | 
					#define RlimitScale(val) \
 | 
				
			||||||
    if (val != RLIM_INFINITY) val /= r->factor
 | 
					    if (val != RLIM_INFINITY) val /= r->factor
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define RlimitHS(val) \
 | 
				
			||||||
 | 
					    rl.rlim_cur = rl.rlim_max = (val)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int sigar_resource_limit_get(sigar_t *sigar,
 | 
					int sigar_resource_limit_get(sigar_t *sigar,
 | 
				
			||||||
                             sigar_resource_limit_t *rlimit)
 | 
					                             sigar_resource_limit_t *rlimit)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@ -976,11 +977,18 @@ int sigar_resource_limit_get(sigar_t *sigar,
 | 
				
			|||||||
        struct rlimit rl;
 | 
					        struct rlimit rl;
 | 
				
			||||||
        rlimit_field_t *r = &sigar_rlimits[i];
 | 
					        rlimit_field_t *r = &sigar_rlimits[i];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if ((r->resource == RLIMIT_UNSUPPORTED) ||
 | 
					        if (r->resource > RLIM_NLIMITS) {
 | 
				
			||||||
            (getrlimit(r->resource, &rl) != 0))
 | 
					            switch (r->resource) {
 | 
				
			||||||
        {
 | 
					              case RLIMIT_NPROC:
 | 
				
			||||||
            rl.rlim_cur = RLIM_INFINITY;
 | 
					                RlimitHS(sysconf(_SC_CHILD_MAX));
 | 
				
			||||||
            rl.rlim_max = RLIM_INFINITY;
 | 
					                break;
 | 
				
			||||||
 | 
					              default:
 | 
				
			||||||
 | 
					                RlimitHS(RLIM_INFINITY);
 | 
				
			||||||
 | 
					                break;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        else if (getrlimit(r->resource, &rl) != 0) {
 | 
				
			||||||
 | 
					            RlimitHS(RLIM_INFINITY);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        else {
 | 
					        else {
 | 
				
			||||||
            RlimitScale(rl.rlim_cur);
 | 
					            RlimitScale(rl.rlim_cur);
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user