Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
B
belle-sip
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
2
Issues
2
List
Board
Labels
Milestones
Merge Requests
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
External Wiki
External Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
BC
public
belle-sip
Commits
459c3994
Commit
459c3994
authored
Sep 09, 2016
by
Gautier Pelloux-Prayer
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
clock_gettime: revert changes
parent
b61dd749
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
55 additions
and
74 deletions
+55
-74
CMakeLists.txt
CMakeLists.txt
+1
-8
clock_gettime.c
src/clock_gettime.c
+47
-37
clock_gettime.h
src/clock_gettime.h
+7
-29
No files found.
CMakeLists.txt
View file @
459c3994
...
...
@@ -77,14 +77,7 @@ endif()
list
(
APPEND CMAKE_MODULE_PATH
"
${
CMAKE_CURRENT_SOURCE_DIR
}
/cmake"
)
check_library_exists
(
"dl"
"dlopen"
""
HAVE_LIBDL
)
check_library_exists
(
rt
"clock_gettime"
""
HAVE_LIBRT
)
if
(
HAVE_LIBRT
)
set
(
HAVE_CLOCK_GETTIME 1
)
else
()
#might be defined in libc library as well
check_library_exists
(
c
"clock_gettime"
""
HAVE_CLOCK_GETTIME
)
endif
()
check_library_exists
(
"rt"
"clock_gettime"
""
HAVE_LIBRT
)
cmake_push_check_state
(
RESET
)
check_symbol_exists
(
"res_ndestroy"
"resolv.h"
HAVE_RES_NDESTROY
)
...
...
src/clock_gettime.c
View file @
459c3994
/*
* Copyright (c), MM Weiss
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* 3. Neither the name of the MM Weiss nor the names of its contributors
* may be used to endorse or promote products derived from this software without
*
* 3. Neither the name of the MM Weiss nor the names of its contributors
* may be used to endorse or promote products derived from this software without
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
* SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
* TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
* SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
* TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
...
...
@@ -32,13 +32,13 @@
* gcc -Wall -c clock_gettime_stub.c
* posix realtime functions; MacOS user space glue
*/
/* @comment
* other possible implementation using intel builtin rdtsc
* rdtsc-workaround: http://www.mcs.anl.gov/~kazutomo/rdtsc.html
*
*
* we could get the ticks by doing this
*
*
* __asm __volatile("mov %%ebx, %%esi\n\t"
* "cpuid\n\t"
* "xchg %%esi, %%ebx\n\t"
...
...
@@ -46,37 +46,47 @@
* : "=a" (a),
* "=d" (d)
* );
* we could even replace our tricky sched_yield call by assembly code to get a better accurency,
* anyway the following C stub will satisfy 99% of apps using posix clock_gettime call,
* anyway the following C stub will satisfy 99% of apps using posix clock_gettime call,
* moreover, the setter version (clock_settime) could be easly written using mach primitives:
* http://www.opensource.apple.com/source/xnu/xnu-${VERSION}/osfmk/man/ (clock_[set|get]_time)
*
*
* hackers don't be crackers, don't you use a flush toilet?
*
*
*
* @see draft: ./posix-realtime-stub/posix-realtime-stub.c
*
*/
#include "clock_gettime.h"
#ifndef HAVE_CLOCK_GETTIME
#ifdef __APPLE__
#pragma weak clock_gettime
#include <sys/time.h>
#include <sys/resource.h>
#include <mach/mach.h>
#include <mach/clock.h>
#include <mach/mach_time.h>
#include <errno.h>
#include <unistd.h>
#include <sched.h>
#include "clock_gettime.h"
static
mach_timebase_info_data_t
__clock_gettime_inf
;
static
clock_serv_t
belle_sip_calandar_clk
;
static
clock_serv_t
belle_sip_system_clk
;
static
int
belle_sip_clock_serv_ready
=
FALSE
;
int
clock_gettime
(
clockid_t
clk_id
,
struct
timespec
*
tp
)
{
int
bc_clock_gettime
(
bc_
clockid_t
clk_id
,
struct
timespec
*
tp
)
{
kern_return_t
ret
;
clock_serv_t
clk_serv
;
mach_timespec_t
tm
;
uint64_t
start
,
end
,
delta
,
nano
;
int
retval
=
-
1
;
if
(
!
belle_sip_clock_serv_ready
)
{
/*host_get_clock_service is pretty slow*/
if
(
KERN_SUCCESS
!=
host_get_clock_service
(
mach_host_self
(),
CALENDAR_CLOCK
,
&
belle_sip_calandar_clk
)
||
KERN_SUCCESS
!=
host_get_clock_service
(
mach_host_self
(),
SYSTEM_CLOCK
,
&
belle_sip_system_clk
)
)
{
...
...
@@ -87,9 +97,9 @@ int clock_gettime(clockid_t clk_id, struct timespec *tp) {
}
switch
(
clk_id
)
{
case
CLOCK_REALTIME
:
case
CLOCK_MONOTONIC
:
clk_serv
=
(
clk_id
==
CLOCK_REALTIME
)
?
belle_sip_calandar_clk
:
belle_sip_system_clk
;
case
BC_
CLOCK_REALTIME
:
case
BC_
CLOCK_MONOTONIC
:
clk_serv
=
(
clk_id
==
BC_
CLOCK_REALTIME
)
?
belle_sip_calandar_clk
:
belle_sip_system_clk
;
if
(
KERN_SUCCESS
==
(
ret
=
clock_get_time
(
clk_serv
,
&
tm
)))
{
tp
->
tv_sec
=
tm
.
tv_sec
;
tp
->
tv_nsec
=
tm
.
tv_nsec
;
...
...
@@ -100,10 +110,10 @@ int clock_gettime(clockid_t clk_id, struct timespec *tp) {
retval
=
-
1
;
}
break
;
case
CLOCK_PROCESS_CPUTIME_ID
:
case
CLOCK_THREAD_CPUTIME_ID
:
case
BC_
CLOCK_PROCESS_CPUTIME_ID
:
case
BC_
CLOCK_THREAD_CPUTIME_ID
:
start
=
mach_absolute_time
();
if
(
clk_id
==
CLOCK_PROCESS_CPUTIME_ID
)
{
if
(
clk_id
==
BC_
CLOCK_PROCESS_CPUTIME_ID
)
{
getpid
();
}
else
{
sched_yield
();
...
...
src/clock_gettime.h
View file @
459c3994
...
...
@@ -19,38 +19,16 @@
#ifndef CLOCK_GETTIME_H_
#define CLOCK_GETTIME_H_
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#ifdef HAVE_LIBRT
/*configure defines HAVE_LIBRT with AC_CHECK_LIB*/
# ifndef HAVE_CLOCK_GETTIME
# define HAVE_CLOCK_GETTIME 1
#endif
#endif
#ifndef HAVE_CLOCK_GETTIME
#include <sys/time.h>
#include <sys/resource.h>
#include <mach/mach.h>
#include <mach/clock.h>
#include <mach/mach_time.h>
#include <errno.h>
#include <unistd.h>
#include <sched.h>
#ifdef __APPLE__
typedef
enum
{
CLOCK_REALTIME
,
CLOCK_MONOTONIC
,
CLOCK_PROCESS_CPUTIME_ID
,
CLOCK_THREAD_CPUTIME_ID
}
clockid_t
;
BC_
CLOCK_REALTIME
,
BC_
CLOCK_MONOTONIC
,
BC_
CLOCK_PROCESS_CPUTIME_ID
,
BC_
CLOCK_THREAD_CPUTIME_ID
}
bc_
clockid_t
;
int
clock_gettime
(
clockid_t
clk_id
,
struct
timespec
*
tp
)
;
int
bc_clock_gettime
(
bc_
clockid_t
clk_id
,
struct
timespec
*
tp
)
;
#endif
#endif
/* CLOCK_GETTIME_H_ */
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment