Software /
code /
prosody
Annotate
util-src/time.c @ 11111:55d8612ac357 0.11
mod_websocket: Continue to process data already in the buffer after an error occurs
Previously any error, or even a normal websocket close frame, would return early,
leaving potentially entire frames in the buffer unprocessed and then discarded.
This change stops processing new data, but returns an existing processed data up
to the point of the error/close.
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Mon, 28 Sep 2020 16:36:12 +0100 |
parent | 9164:35807f02bdc7 |
child | 9680:a374905e99ff |
rev | line source |
---|---|
9164
35807f02bdc7
util.time: Allow for already set constant
Kim Alvefur <zash@zash.se>
parents:
9163
diff
changeset
|
1 #ifndef _POSIX_C_SOURCE |
9162 | 2 #define _POSIX_C_SOURCE 199309L |
9164
35807f02bdc7
util.time: Allow for already set constant
Kim Alvefur <zash@zash.se>
parents:
9163
diff
changeset
|
3 #endif |
9162 | 4 |
5 #include <time.h> | |
6 #include <lua.h> | |
7 | |
8 lua_Number tv2number(struct timespec *tv) { | |
9 return tv->tv_sec + tv->tv_nsec * 1e-9; | |
10 } | |
11 | |
12 int lc_time_realtime(lua_State *L) { | |
13 struct timespec t; | |
14 clock_gettime(CLOCK_REALTIME, &t); | |
15 lua_pushnumber(L, tv2number(&t)); | |
16 return 1; | |
17 } | |
18 | |
9163 | 19 int lc_time_monotonic(lua_State *L) { |
20 struct timespec t; | |
21 clock_gettime(CLOCK_MONOTONIC, &t); | |
22 lua_pushnumber(L, tv2number(&t)); | |
23 return 1; | |
24 } | |
25 | |
9162 | 26 int luaopen_util_time(lua_State *L) { |
27 lua_createtable(L, 0, 2); | |
28 { | |
29 lua_pushcfunction(L, lc_time_realtime); | |
30 lua_setfield(L, -2, "now"); | |
9163 | 31 lua_pushcfunction(L, lc_time_monotonic); |
32 lua_setfield(L, -2, "monotonic"); | |
9162 | 33 } |
34 return 1; | |
35 } |