* Solving problems while compiling jack2 on macOS X with dbus support * Using the right function name in uptime errortags/v1.9.13
@@ -27,13 +27,13 @@ | |||||
#include <dbus/dbus.h> | #include <dbus/dbus.h> | ||||
#include <assert.h> | #include <assert.h> | ||||
#include <unistd.h> | #include <unistd.h> | ||||
#include <sys/sysinfo.h> | |||||
#include <errno.h> | #include <errno.h> | ||||
#include "controller.h" | #include "controller.h" | ||||
#include "controller_internal.h" | #include "controller_internal.h" | ||||
#include "xml.h" | #include "xml.h" | ||||
#include "reserve.h" | #include "reserve.h" | ||||
#include "uptime.h" | |||||
struct jack_dbus_interface_descriptor * g_jackcontroller_interfaces[] = | struct jack_dbus_interface_descriptor * g_jackcontroller_interfaces[] = | ||||
{ | { | ||||
@@ -787,18 +787,18 @@ void | |||||
jack_controller_run( | jack_controller_run( | ||||
void * context) | void * context) | ||||
{ | { | ||||
struct sysinfo si; | |||||
long ut; | |||||
if (controller_ptr->pending_save == 0) | if (controller_ptr->pending_save == 0) | ||||
{ | { | ||||
return; | return; | ||||
} | } | ||||
if (sysinfo(&si) != 0) | |||||
if ((ut = uptime()) < 0) | |||||
{ | { | ||||
jack_error("sysinfo() failed with %d", errno); | |||||
jack_error(UPTIME_FUNCTION_NAME "() failed with %d", errno); | |||||
} | } | ||||
else if (si.uptime < controller_ptr->pending_save + 2) /* delay save by two seconds */ | |||||
else if (ut < controller_ptr->pending_save + 2) /* delay save by two seconds */ | |||||
{ | { | ||||
return; | return; | ||||
} | } | ||||
@@ -813,15 +813,15 @@ void | |||||
jack_controller_pending_save( | jack_controller_pending_save( | ||||
struct jack_controller * controller_ptr) | struct jack_controller * controller_ptr) | ||||
{ | { | ||||
struct sysinfo si; | |||||
long ut; | |||||
if (sysinfo(&si) != 0) | |||||
if ((ut = uptime()) < 0) | |||||
{ | { | ||||
jack_error("sysinfo() failed with %d.", errno); | |||||
jack_error(UPTIME_FUNCTION_NAME "() failed with %d.", errno); | |||||
controller_ptr->pending_save = 0; | controller_ptr->pending_save = 0; | ||||
jack_controller_settings_save_auto(controller_ptr); | jack_controller_settings_save_auto(controller_ptr); | ||||
return; | return; | ||||
} | } | ||||
controller_ptr->pending_save = si.uptime; | |||||
controller_ptr->pending_save = ut; | |||||
} | } |
@@ -63,8 +63,14 @@ def build(bld): | |||||
] | ] | ||||
obj.use = ['serverlib'] | obj.use = ['serverlib'] | ||||
if bld.env['IS_LINUX']: | if bld.env['IS_LINUX']: | ||||
obj.source += [ | |||||
'../linux/uptime.c', | |||||
] | |||||
obj.use += ['PTHREAD', 'DL', 'RT', 'DBUS-1', 'EXPAT', 'STDC++'] | obj.use += ['PTHREAD', 'DL', 'RT', 'DBUS-1', 'EXPAT', 'STDC++'] | ||||
if bld.env['IS_MACOSX']: | if bld.env['IS_MACOSX']: | ||||
obj.source += [ | |||||
'../macosx/uptime.c', | |||||
] | |||||
obj.use += ['PTHREAD', 'DL', 'DBUS-1', 'EXPAT'] | obj.use += ['PTHREAD', 'DL', 'DBUS-1', 'EXPAT'] | ||||
obj.target = 'jackdbus' | obj.target = 'jackdbus' | ||||
@@ -0,0 +1,12 @@ | |||||
#include <sys/sysinfo.h> | |||||
long uptime(void) { | |||||
struct sysinfo si; | |||||
if (sysinfo(&si) != 0) | |||||
{ | |||||
return -1; | |||||
} | |||||
return si.uptime; | |||||
} |
@@ -0,0 +1,27 @@ | |||||
/* | |||||
Copyright (C) 2004-2005 Grame | |||||
This program is free software; you can redistribute it and/or modify | |||||
it 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. | |||||
This program is distributed in the hope that it will be useful, | |||||
but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
GNU General Public License for more details. | |||||
You should have received a copy of the GNU General Public License | |||||
along with this program; if not, write to the Free Software | |||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | |||||
*/ | |||||
#ifndef __uptime_LINUX__ | |||||
#define __uptime_LINUX__ | |||||
#define UPTIME_FUNCTION_NAME "sysinfo" | |||||
long uptime(void); | |||||
#endif |
@@ -0,0 +1,17 @@ | |||||
#include <time.h> | |||||
#include <errno.h> | |||||
#include <sys/sysctl.h> | |||||
long uptime(void) | |||||
{ | |||||
struct timeval boottime; | |||||
size_t len = sizeof(boottime); | |||||
int mib[2] = { CTL_KERN, KERN_BOOTTIME }; | |||||
if (sysctl(mib, 2, &boottime, &len, NULL, 0) < 0) | |||||
{ | |||||
return -1L; | |||||
} | |||||
time_t bsec = boottime.tv_sec, csec = time(NULL); | |||||
return (long) difftime(csec, bsec); | |||||
} |
@@ -0,0 +1,27 @@ | |||||
/* | |||||
Copyright (C) 2004-2005 Grame | |||||
This program is free software; you can redistribute it and/or modify | |||||
it 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. | |||||
This program is distributed in the hope that it will be useful, | |||||
but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
GNU General Public License for more details. | |||||
You should have received a copy of the GNU General Public License | |||||
along with this program; if not, write to the Free Software | |||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | |||||
*/ | |||||
#ifndef __uptime_APPLE__ | |||||
#define __uptime_APPLE__ | |||||
#define UPTIME_FUNCTION_NAME "sysctl" | |||||
long uptime(void); | |||||
#endif |