static char filename[FILENAME_MAX + 1] = "";
if(unlikely(!filename[0]))
- snprintfz(filename, FILENAME_MAX, "%s/proc/sys/kernel/sem", global_host_prefix);
+ snprintfz(filename, FILENAME_MAX, "%s/proc/sys/kernel/sem", netdata_configured_host_prefix);
if(unlikely(!ff)) {
ff = procfile_open(filename, NULL, PROCFILE_FLAG_DEFAULT);
if(procfile_lines(ff) >= 1 && procfile_linewords(ff, 0) >= 4) {
lim->semvmx = SEMVMX;
- lim->semmsl = atoi(procfile_lineword(ff, 0, 0));
- lim->semmns = atoi(procfile_lineword(ff, 0, 1));
- lim->semopm = atoi(procfile_lineword(ff, 0, 2));
- lim->semmni = atoi(procfile_lineword(ff, 0, 3));
+ lim->semmsl = str2i(procfile_lineword(ff, 0, 0));
+ lim->semmns = str2i(procfile_lineword(ff, 0, 1));
+ lim->semopm = str2i(procfile_lineword(ff, 0, 2));
+ lim->semmni = str2i(procfile_lineword(ff, 0, 3));
return 0;
}
else {
*/
static inline int ipc_sem_get_status(struct ipc_status *st) {
- static int error_shown = 0;
struct seminfo seminfo;
union semun arg;
if(unlikely(semctl (0, 0, SEM_INFO, arg) < 0)) {
/* kernel not configured for semaphores */
+ static int error_shown = 0;
if(unlikely(!error_shown)) {
error("IPC: kernel is not configured for semaphores");
error_shown = 1;
return 0;
}
-int do_ipc(int update_every, unsigned long long dt) {
+int do_ipc(int update_every, usec_t dt) {
(void)dt;
static int initialized = 0, read_limits_next = 0;
static RRDSET *semaphores = NULL, *arrays = NULL;
if(unlikely(!initialized)) {
+ initialized = 1;
+
// make sure it works
if(ipc_sem_get_limits(&limits) == -1) {
error("unable to fetch semaphore limits");
error("Unable to fetch semaphore limits.");
}
else {
- rrdvar_custom_host_variable_set(arrays_max, limits.semmni);
- rrdvar_custom_host_variable_set(semaphores_max, limits.semmns);
+ if(arrays_max) rrdvar_custom_host_variable_set(arrays_max, limits.semmni);
+ if(semaphores_max) rrdvar_custom_host_variable_set(semaphores_max, limits.semmns);
arrays->red = limits.semmni;
semaphores->red = limits.semmns;