Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
cellframe-sdk
Manage
Activity
Members
Labels
Plan
Issues
0
Issue boards
Milestones
Code
Merge requests
16
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package Registry
Container Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
cellframe
cellframe-sdk
Commits
4358b7ff
Commit
4358b7ff
authored
4 years ago
by
Dmitriy A. Gerasimov
Browse files
Options
Downloads
Patches
Plain Diff
[*] Fixes for timer
parent
03303c22
No related branches found
Branches containing commit
No related tags found
3 merge requests
!251
Master
,
!250
Master
,
!187
Release 2.5 version
Pipeline
#4606
passed with stage
Stage: analyze
in 10 seconds
Changes
2
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
dap-sdk/net/core/dap_timerfd.c
+23
-40
23 additions, 40 deletions
dap-sdk/net/core/dap_timerfd.c
dap-sdk/net/core/include/dap_timerfd.h
+1
-1
1 addition, 1 deletion
dap-sdk/net/core/include/dap_timerfd.h
with
24 additions
and
41 deletions
dap-sdk/net/core/dap_timerfd.c
+
23
−
40
View file @
4358b7ff
...
...
@@ -38,36 +38,8 @@
#include
"dap_timerfd.h"
#define LOG_TAG "dap_timerfd"
static
void
s_es_callback_timer
(
struct
dap_events_socket
*
a_event_sock
);
static
void
s_es_time_callback
(
dap_events_socket_t
*
a_es
);
void
callback_timerfd_read
(
struct
dap_events_socket
*
a_event_sock
,
void
*
arg
)
{
uint64_t
l_ptiu64
;
size_t
l_read_ret
;
do
{
l_read_ret
=
dap_events_socket_pop_from_buf_in
(
a_event_sock
,
&
l_ptiu64
,
sizeof
(
l_ptiu64
));
if
(
l_read_ret
>
0
)
{
dap_timerfd_t
*
l_timerfd
=
a_event_sock
->
_inheritor
;
//printf("\nread() returned %d, %d\n", l_ptiu64, l_read_ret);
struct
itimerspec
l_ts
;
// first expiration in 0 seconds after times start
l_ts
.
it_interval
.
tv_sec
=
0
;
l_ts
.
it_interval
.
tv_nsec
=
0
;
// timeout for timer
l_ts
.
it_value
.
tv_sec
=
l_timerfd
->
timeout_ms
/
1000
;
l_ts
.
it_value
.
tv_nsec
=
(
l_timerfd
->
timeout_ms
%
1000
)
*
1000000
;
if
(
timerfd_settime
(
l_timerfd
->
tfd
,
0
,
&
l_ts
,
NULL
)
<
0
)
{
log_it
(
L_WARNING
,
"callback_timerfd_read() failed: timerfd_settime() errno=%d
\n
"
,
errno
);
}
// run user's callback
if
(
l_timerfd
->
callback
)
l_timerfd
->
callback
(
l_timerfd
->
callback_arg
);
}
}
while
(
l_read_ret
>
0
);
dap_events_socket_set_readable_unsafe
(
a_event_sock
,
true
);
}
/**
* @brief dap_events_socket_init Init clients module
...
...
@@ -125,7 +97,7 @@ dap_timerfd_t* dap_timerfd_start_on_worker(dap_worker_t * a_worker, uint64_t a_t
// create events_socket for timer file descriptor
dap_events_socket_callbacks_t
l_s_callbacks
;
memset
(
&
l_s_callbacks
,
0
,
sizeof
(
l_s_callbacks
));
l_s_callbacks
.
timer_callback
=
s_es_
time_
callback
;
l_s_callbacks
.
timer_callback
=
s_es_callback
_timer
;
dap_events_socket_t
*
l_events_socket
=
dap_events_socket_wrap_no_add
(
a_worker
->
events
,
l_tfd
,
&
l_s_callbacks
);
l_events_socket
->
type
=
DESCRIPTOR_TYPE_TIMER
;
...
...
@@ -144,25 +116,36 @@ dap_timerfd_t* dap_timerfd_start_on_worker(dap_worker_t * a_worker, uint64_t a_t
}
/**
* @brief s_es_
time_
callback
* @param a_e
s
* @brief s_es_callback
_timer
* @param a_e
vent_sock
*/
static
void
s_es_
time_
callback
(
dap_events_socket
_t
*
a_e
s
)
static
void
s_es_callback
_timer
(
struct
dap_events_socket
*
a_e
vent_sock
)
{
dap_timerfd_t
*
l_timer
=
(
dap_timerfd_t
*
)
a_es
->
_inheritor
;
assert
(
l_timer
);
if
(
l_timer
->
callback
)
l_timer
->
callback
(
l_timer
->
callback_arg
);
uint64_t
l_ptiu64
;
dap_timerfd_t
*
l_timerfd
=
a_event_sock
->
_inheritor
;
//printf("\nread() returned %d, %d\n", l_ptiu64, l_read_ret);
struct
itimerspec
l_ts
;
// first expiration in 0 seconds after times start
l_ts
.
it_interval
.
tv_sec
=
0
;
l_ts
.
it_interval
.
tv_nsec
=
0
;
// timeout for timer
l_ts
.
it_value
.
tv_sec
=
l_timerfd
->
timeout_ms
/
1000
;
l_ts
.
it_value
.
tv_nsec
=
(
l_timerfd
->
timeout_ms
%
1000
)
*
1000000
;
if
(
timerfd_settime
(
l_timerfd
->
tfd
,
0
,
&
l_ts
,
NULL
)
<
0
)
{
log_it
(
L_WARNING
,
"callback_timerfd_read() failed: timerfd_settime() errno=%d
\n
"
,
errno
);
}
// run user's callback
if
(
l_timerfd
->
callback
)
l_timerfd
->
callback
(
l_timerfd
->
callback_arg
);
dap_events_socket_set_readable_unsafe
(
a_event_sock
,
true
);
}
/**
* @brief dap_timerfd_stop
* @param a_tfd
* @param a_callback
* @return 0 or <0 if error
*/
int
dap_timerfd_delete
(
dap_timerfd_t
*
l_timerfd
)
void
dap_timerfd_delete
(
dap_timerfd_t
*
l_timerfd
)
{
dap_events_socket_queue_remove_and_delete
(
l_timerfd
->
events_socket
);
}
...
...
This diff is collapsed.
Click to expand it.
dap-sdk/net/core/include/dap_timerfd.h
+
1
−
1
View file @
4358b7ff
...
...
@@ -47,5 +47,5 @@ typedef struct dap_timerfd {
int
dap_timerfd_init
();
dap_timerfd_t
*
dap_timerfd_start
(
uint64_t
a_timeout_ms
,
dap_timerfd_callback_t
a_callback
,
void
*
callback_arg
);
dap_timerfd_t
*
dap_timerfd_start_on_worker
(
dap_worker_t
*
a_worker
,
uint64_t
a_timeout_ms
,
dap_timerfd_callback_t
a_callback
,
void
*
a_callback_arg
);
int
dap_timerfd_delete
(
dap_timerfd_t
*
l_timerfd
);
void
dap_timerfd_delete
(
dap_timerfd_t
*
l_timerfd
);
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment