scale resource limits same as the ulimit command
This commit is contained in:
		
							parent
							
								
									cad4b55102
								
							
						
					
					
						commit
						0523277687
					
				
							
								
								
									
										24
									
								
								src/sigar.c
									
									
									
									
									
								
							
							
						
						
									
										24
									
								
								src/sigar.c
									
									
									
									
									
								
							@ -934,6 +934,7 @@ int sigar_net_info_get(sigar_t *sigar,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
typedef struct {
 | 
					typedef struct {
 | 
				
			||||||
    int resource;
 | 
					    int resource;
 | 
				
			||||||
 | 
					    int factor;
 | 
				
			||||||
    size_t cur;
 | 
					    size_t cur;
 | 
				
			||||||
    size_t max;
 | 
					    size_t max;
 | 
				
			||||||
} rlimit_field_t;
 | 
					} rlimit_field_t;
 | 
				
			||||||
@ -949,18 +950,21 @@ typedef struct {
 | 
				
			|||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static rlimit_field_t sigar_rlimits[] = {
 | 
					static rlimit_field_t sigar_rlimits[] = {
 | 
				
			||||||
    { RLIMIT_CPU, RlimitOffsets(cpu) },
 | 
					    { RLIMIT_CPU,    1,    RlimitOffsets(cpu) },
 | 
				
			||||||
    { RLIMIT_FSIZE, RlimitOffsets(file_size) },
 | 
					    { RLIMIT_FSIZE,  1024, RlimitOffsets(file_size) },
 | 
				
			||||||
    { RLIMIT_DATA, RlimitOffsets(data) },
 | 
					    { RLIMIT_DATA,   1024, RlimitOffsets(data) },
 | 
				
			||||||
    { RLIMIT_STACK, RlimitOffsets(stack) },
 | 
					    { RLIMIT_STACK,  1024, RlimitOffsets(stack) },
 | 
				
			||||||
    { RLIMIT_CORE, RlimitOffsets(core) },
 | 
					    { RLIMIT_CORE,   1024, RlimitOffsets(core) },
 | 
				
			||||||
    { RLIMIT_RSS, RlimitOffsets(memory) },
 | 
					    { RLIMIT_RSS,    1024, RlimitOffsets(memory) },
 | 
				
			||||||
    { RLIMIT_NPROC, RlimitOffsets(processes) },
 | 
					    { RLIMIT_NPROC,  1,    RlimitOffsets(processes) },
 | 
				
			||||||
    { RLIMIT_NOFILE, RlimitOffsets(open_files) },
 | 
					    { RLIMIT_NOFILE, 1,    RlimitOffsets(open_files) },
 | 
				
			||||||
    { RLIMIT_AS, RlimitOffsets(virtual_memory) },
 | 
					    { RLIMIT_AS,     1024, RlimitOffsets(virtual_memory) },
 | 
				
			||||||
    { -1 }
 | 
					    { -1 }
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define RlimitScale(val) \
 | 
				
			||||||
 | 
					    if (val != RLIM_INFINITY) val /= r->factor
 | 
				
			||||||
 | 
					
 | 
				
			||||||
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)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@ -979,6 +983,8 @@ int sigar_resource_limit_get(sigar_t *sigar,
 | 
				
			|||||||
            rl.rlim_max = SIGAR_FIELD_NOTIMPL;
 | 
					            rl.rlim_max = SIGAR_FIELD_NOTIMPL;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        RlimitScale(rl.rlim_cur);
 | 
				
			||||||
 | 
					        RlimitScale(rl.rlim_max);
 | 
				
			||||||
        RlimitSet(rlimit, r->cur, rl.rlim_cur);
 | 
					        RlimitSet(rlimit, r->cur, rl.rlim_cur);
 | 
				
			||||||
        RlimitSet(rlimit, r->max, rl.rlim_max);
 | 
					        RlimitSet(rlimit, r->max, rl.rlim_max);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user