Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
M
mongoose
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
esp
mongoose
Commits
05082cec
Commit
05082cec
authored
9 years ago
by
Deomid Ryabkov
Committed by
Sergey Lyubka
9 years ago
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Use sub-second time for timers in MG
PUBLISHED_FROM=2b5bd1589465a5f43bc888c689842332cf7cdf98
parent
f05733da
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
44 additions
and
13 deletions
+44
-13
mongoose.c
mongoose.c
+36
-12
mongoose.h
mongoose.h
+8
-1
No files found.
mongoose.c
View file @
05082cec
...
...
@@ -491,6 +491,30 @@ int mkdir(const char *path, mode_t mode) {
#endif
/* EXCLUDE_COMMON */
#ifdef NS_MODULE_LINES
#line 1 "./src/../../common/cs_time.c"
/**/
#endif
#ifndef _WIN32
#include <stddef.h>
#ifndef MG_CC3200
#include <sys/time.h>
#endif
#else
#include <windows.h>
#endif
double
cs_time
()
{
double
now
;
#ifndef _WIN32
struct
timeval
tv
;
if
(
gettimeofday
(
&
tv
,
NULL
/* tz */
)
!=
0
)
return
0
;
now
=
(
double
)
tv
.
tv_sec
+
(((
double
)
tv
.
tv_usec
)
/
1000000
.
0
);
#else
now
=
GetTickCount
()
/
1000
.
0
;
#endif
return
now
;
}
#ifdef NS_MODULE_LINES
#line 1 "./src/../deps/frozen/frozen.c"
/**/
#endif
...
...
@@ -1946,10 +1970,10 @@ MG_INTERNAL void mg_call(struct mg_connection *nc,
(
int
)
nc
->
recv_mbuf
.
len
,
(
int
)
nc
->
send_mbuf
.
len
));
}
void
mg_if_timer
(
struct
mg_connection
*
c
,
time_t
now
)
{
void
mg_if_timer
(
struct
mg_connection
*
c
,
double
now
)
{
if
(
c
->
ev_timer_time
>
0
&&
now
>=
c
->
ev_timer_time
)
{
double
dnow
=
now
,
old_value
=
c
->
ev_timer_time
;
mg_call
(
c
,
NULL
,
MG_EV_TIMER
,
&
d
now
);
double
old_value
=
c
->
ev_timer_time
;
mg_call
(
c
,
NULL
,
MG_EV_TIMER
,
&
now
);
/*
* To prevent timer firing all the time, reset the timer after delivery.
* However, in case user sets it to new value, do not reset.
...
...
@@ -2132,7 +2156,7 @@ MG_INTERNAL struct mg_connection *mg_create_connection(
conn
->
sock
=
INVALID_SOCKET
;
conn
->
handler
=
callback
;
conn
->
mgr
=
mgr
;
conn
->
last_io_time
=
time
(
NULL
);
conn
->
last_io_time
=
cs_time
(
);
conn
->
flags
=
opts
.
flags
&
_MG_ALLOWED_CONNECT_FLAGS_MASK
;
conn
->
user_data
=
opts
.
user_data
;
/*
...
...
@@ -2422,7 +2446,7 @@ MG_INTERNAL size_t recv_avail_size(struct mg_connection *conn, size_t max) {
}
void
mg_send
(
struct
mg_connection
*
nc
,
const
void
*
buf
,
int
len
)
{
nc
->
last_io_time
=
time
(
NULL
);
nc
->
last_io_time
=
cs_time
(
);
if
(
nc
->
flags
&
MG_F_UDP
)
{
mg_if_udp_send
(
nc
,
buf
,
len
);
}
else
{
...
...
@@ -2453,7 +2477,7 @@ static void mg_recv_common(struct mg_connection *nc, void *buf, int len) {
MG_FREE
(
buf
);
return
;
}
nc
->
last_io_time
=
time
(
NULL
);
nc
->
last_io_time
=
cs_time
(
);
if
(
nc
->
recv_mbuf
.
len
==
0
)
{
/* Adopt buf as recv_mbuf's backing store. */
mbuf_free
(
&
nc
->
recv_mbuf
);
...
...
@@ -2580,7 +2604,7 @@ static void resolve_cb(struct mg_dns_message *msg, void *data,
}
if
(
e
==
MG_RESOLVE_TIMEOUT
)
{
double
now
=
time
(
NULL
);
double
now
=
cs_time
(
);
mg_call
(
nc
,
NULL
,
MG_EV_TIMER
,
&
now
);
}
...
...
@@ -3172,7 +3196,7 @@ static void mg_ssl_begin(struct mg_connection *nc) {
#define _MG_F_FD_CAN_WRITE 1 << 1
#define _MG_F_FD_ERROR 1 << 2
void
mg_mgr_handle_conn
(
struct
mg_connection
*
nc
,
int
fd_flags
,
time_t
now
)
{
void
mg_mgr_handle_conn
(
struct
mg_connection
*
nc
,
int
fd_flags
,
double
now
)
{
DBG
((
"%p fd=%d fd_flags=%d nc_flags=%lu rmbl=%d smbl=%d"
,
nc
,
nc
->
sock
,
fd_flags
,
nc
->
flags
,
(
int
)
nc
->
recv_mbuf
.
len
,
(
int
)
nc
->
send_mbuf
.
len
));
...
...
@@ -3378,10 +3402,10 @@ time_t mg_mgr_poll(struct mg_mgr *mgr, int timeout_ms) {
struct
epoll_event
events
[
MG_EPOLL_MAX_EVENTS
];
struct
mg_connection
*
nc
,
*
next
;
int
num_ev
,
fd_flags
;
time_t
now
;
double
now
;
num_ev
=
epoll_wait
(
epoll_fd
,
events
,
MG_EPOLL_MAX_EVENTS
,
timeout_ms
);
now
=
time
(
NULL
);
now
=
cs_time
(
);
DBG
((
"epoll_wait @ %ld num_ev=%d"
,
(
long
)
now
,
num_ev
));
while
(
num_ev
--
>
0
)
{
...
...
@@ -3462,7 +3486,7 @@ void mg_add_to_set(sock_t sock, fd_set *set, sock_t *max_fd) {
}
time_t
mg_mgr_poll
(
struct
mg_mgr
*
mgr
,
int
milli
)
{
time_t
now
=
time
(
NULL
);
double
now
=
cs_time
(
);
struct
mg_connection
*
nc
,
*
tmp
;
struct
timeval
tv
;
fd_set
read_set
,
write_set
,
err_set
;
...
...
@@ -3503,7 +3527,7 @@ time_t mg_mgr_poll(struct mg_mgr *mgr, int milli) {
tv
.
tv_usec
=
(
milli
%
1000
)
*
1000
;
num_selected
=
select
((
int
)
max_fd
+
1
,
&
read_set
,
&
write_set
,
&
err_set
,
&
tv
);
now
=
time
(
NULL
);
now
=
cs_time
(
);
DBG
((
"select @ %ld num_ev=%d of %d"
,
(
long
)
now
,
num_selected
,
num_fds
));
#ifndef MG_DISABLE_SOCKETPAIR
...
...
This diff is collapsed.
Click to expand it.
mongoose.h
View file @
05082cec
...
...
@@ -326,6 +326,13 @@ void cs_log_printf(const char *fmt, ...);
#endif
#endif
/* _CS_DBG_H_ */
#ifndef _CS_TIME_H_
#define _CS_TIME_H_
/* Sub-second granularity time(). */
double
cs_time
();
#endif
/* _CS_TIME_H_ */
/*
* Copyright (c) 2015 Cesanta Software Limited
* All rights reserved
...
...
@@ -1187,7 +1194,7 @@ void mg_if_recved(struct mg_connection *nc, size_t len);
void
mg_if_poll
(
struct
mg_connection
*
nc
,
time_t
now
);
/* Deliver a TIMER event to the connection. */
void
mg_if_timer
(
struct
mg_connection
*
c
,
time_t
now
);
void
mg_if_timer
(
struct
mg_connection
*
c
,
double
now
);
/* Perform interface-related connection initialization. Return 1 on success. */
int
mg_if_create_conn
(
struct
mg_connection
*
nc
);
...
...
This diff is collapsed.
Click to expand it.
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