redrust/
timeout.rs

1extern crate c2rust_bitfields;
2extern crate libc;
3extern crate core;
4
5extern crate num_traits;
6
7extern "C" {
8    pub type RedisModuleCommand;
9    static mut server: redisServer;
10    fn mstime() -> libc::c_longlong;
11    fn freeClient(c: *mut client);
12    fn addReplyError(c: *mut client, err: *const libc::c_char);
13    fn getLongLongFromObjectOrReply(
14        c: *mut client,
15        o: *mut robj,
16        target: *mut libc::c_longlong,
17        msg: *const libc::c_char,
18    ) -> libc::c_int;
19    fn getLongDoubleFromObjectOrReply(
20        c: *mut client,
21        o: *mut robj,
22        target: *mut f64,
23        msg: *const libc::c_char,
24    ) -> libc::c_int;
25    fn mustObeyClient(c: *mut client) -> libc::c_int;
26    fn _serverLog(level: libc::c_int, fmt: *const libc::c_char, _: ...);
27    fn unblockClient(c: *mut client);
28    fn replyToBlockedClientTimedOut(c: *mut client);
29    fn memcpy(
30        _: *mut libc::c_void,
31        _: *const libc::c_void,
32        _: libc::c_ulong,
33    ) -> *mut libc::c_void;
34    fn memset(
35        _: *mut libc::c_void,
36        _: libc::c_int,
37        _: libc::c_ulong,
38    ) -> *mut libc::c_void;
39    fn raxTryInsert(
40        rax: *mut rax,
41        s: *mut libc::c_uchar,
42        len: size_t,
43        data: *mut libc::c_void,
44        old: *mut *mut libc::c_void,
45    ) -> libc::c_int;
46    fn raxRemove(
47        rax: *mut rax,
48        s: *mut libc::c_uchar,
49        len: size_t,
50        old: *mut *mut libc::c_void,
51    ) -> libc::c_int;
52    fn raxStart(it: *mut raxIterator, rt: *mut rax);
53    fn raxSeek(
54        it: *mut raxIterator,
55        op: *const libc::c_char,
56        ele: *mut libc::c_uchar,
57        len: size_t,
58    ) -> libc::c_int;
59    fn raxNext(it: *mut raxIterator) -> libc::c_int;
60    fn raxStop(it: *mut raxIterator);
61    fn raxSize(rax: *mut rax) -> uint64_t;
62    fn intrev64(v: uint64_t) -> uint64_t;
63    fn clusterRedirectBlockedClientIfNeeded(c: *mut client) -> libc::c_int;
64    fn ceill(_: f64) -> f64;
65}
66pub type __int16_t = libc::c_short;
67pub type __uint16_t = libc::c_ushort;
68pub type __int32_t = libc::c_int;
69pub type __uint32_t = libc::c_uint;
70pub type __int64_t = libc::c_long;
71pub type __uint64_t = libc::c_ulong;
72pub type __uint_least64_t = __uint64_t;
73pub type __mode_t = libc::c_uint;
74pub type __off64_t = libc::c_long;
75pub type __pid_t = libc::c_int;
76pub type __time_t = libc::c_long;
77pub type __ssize_t = libc::c_long;
78pub type __sig_atomic_t = libc::c_int;
79pub type size_t = libc::c_ulong;
80#[derive(Copy, Clone)]
81#[repr(C)]
82pub struct iovec {
83    pub iov_base: *mut libc::c_void,
84    pub iov_len: size_t,
85}
86pub type mode_t = __mode_t;
87pub type off_t = __off64_t;
88pub type pid_t = __pid_t;
89pub type ssize_t = __ssize_t;
90pub type time_t = __time_t;
91pub type int16_t = __int16_t;
92pub type int32_t = __int32_t;
93pub type int64_t = __int64_t;
94pub type pthread_t = libc::c_ulong;
95pub type uint16_t = __uint16_t;
96pub type uint32_t = __uint32_t;
97pub type uint64_t = __uint64_t;
98pub type uint_least64_t = __uint_least64_t;
99pub type sds = *mut libc::c_char;
100#[derive(Copy, Clone)]
101#[repr(C)]
102pub struct aeEventLoop {
103    pub maxfd: libc::c_int,
104    pub setsize: libc::c_int,
105    pub timeEventNextId: libc::c_longlong,
106    pub events: *mut aeFileEvent,
107    pub fired: *mut aeFiredEvent,
108    pub timeEventHead: *mut aeTimeEvent,
109    pub stop: libc::c_int,
110    pub apidata: *mut libc::c_void,
111    pub beforesleep: Option::<aeBeforeSleepProc>,
112    pub aftersleep: Option::<aeBeforeSleepProc>,
113    pub flags: libc::c_int,
114}
115pub type aeBeforeSleepProc = unsafe extern "C" fn(*mut aeEventLoop) -> ();
116#[derive(Copy, Clone)]
117#[repr(C)]
118pub struct aeTimeEvent {
119    pub id: libc::c_longlong,
120    pub when: monotime,
121    pub timeProc: Option::<aeTimeProc>,
122    pub finalizerProc: Option::<aeEventFinalizerProc>,
123    pub clientData: *mut libc::c_void,
124    pub prev: *mut aeTimeEvent,
125    pub next: *mut aeTimeEvent,
126    pub refcount: libc::c_int,
127}
128pub type aeEventFinalizerProc = unsafe extern "C" fn(
129    *mut aeEventLoop,
130    *mut libc::c_void,
131) -> ();
132pub type aeTimeProc = unsafe extern "C" fn(
133    *mut aeEventLoop,
134    libc::c_longlong,
135    *mut libc::c_void,
136) -> libc::c_int;
137pub type monotime = uint64_t;
138#[derive(Copy, Clone)]
139#[repr(C)]
140pub struct aeFiredEvent {
141    pub fd: libc::c_int,
142    pub mask: libc::c_int,
143}
144#[derive(Copy, Clone)]
145#[repr(C)]
146pub struct aeFileEvent {
147    pub mask: libc::c_int,
148    pub rfileProc: Option::<aeFileProc>,
149    pub wfileProc: Option::<aeFileProc>,
150    pub clientData: *mut libc::c_void,
151}
152pub type aeFileProc = unsafe extern "C" fn(
153    *mut aeEventLoop,
154    libc::c_int,
155    *mut libc::c_void,
156    libc::c_int,
157) -> ();
158#[derive(Copy, Clone)]
159#[repr(C)]
160pub struct connection {
161    pub type_0: *mut ConnectionType,
162    pub state: ConnectionState,
163    pub flags: libc::c_short,
164    pub refs: libc::c_short,
165    pub last_errno: libc::c_int,
166    pub private_data: *mut libc::c_void,
167    pub conn_handler: ConnectionCallbackFunc,
168    pub write_handler: ConnectionCallbackFunc,
169    pub read_handler: ConnectionCallbackFunc,
170    pub fd: libc::c_int,
171}
172pub type ConnectionCallbackFunc = Option::<unsafe extern "C" fn(*mut connection) -> ()>;
173pub type ConnectionState = libc::c_uint;
174pub const CONN_STATE_ERROR: ConnectionState = 5;
175pub const CONN_STATE_CLOSED: ConnectionState = 4;
176pub const CONN_STATE_CONNECTED: ConnectionState = 3;
177pub const CONN_STATE_ACCEPTING: ConnectionState = 2;
178pub const CONN_STATE_CONNECTING: ConnectionState = 1;
179pub const CONN_STATE_NONE: ConnectionState = 0;
180#[derive(Copy, Clone)]
181#[repr(C)]
182pub struct ConnectionType {
183    pub ae_handler: Option::<
184        unsafe extern "C" fn(
185            *mut aeEventLoop,
186            libc::c_int,
187            *mut libc::c_void,
188            libc::c_int,
189        ) -> (),
190    >,
191    pub connect: Option::<
192        unsafe extern "C" fn(
193            *mut connection,
194            *const libc::c_char,
195            libc::c_int,
196            *const libc::c_char,
197            ConnectionCallbackFunc,
198        ) -> libc::c_int,
199    >,
200    pub write: Option::<
201        unsafe extern "C" fn(*mut connection, *const libc::c_void, size_t) -> libc::c_int,
202    >,
203    pub writev: Option::<
204        unsafe extern "C" fn(*mut connection, *const iovec, libc::c_int) -> libc::c_int,
205    >,
206    pub read: Option::<
207        unsafe extern "C" fn(*mut connection, *mut libc::c_void, size_t) -> libc::c_int,
208    >,
209    pub close: Option::<unsafe extern "C" fn(*mut connection) -> ()>,
210    pub accept: Option::<
211        unsafe extern "C" fn(*mut connection, ConnectionCallbackFunc) -> libc::c_int,
212    >,
213    pub set_write_handler: Option::<
214        unsafe extern "C" fn(
215            *mut connection,
216            ConnectionCallbackFunc,
217            libc::c_int,
218        ) -> libc::c_int,
219    >,
220    pub set_read_handler: Option::<
221        unsafe extern "C" fn(*mut connection, ConnectionCallbackFunc) -> libc::c_int,
222    >,
223    pub get_last_error: Option::<
224        unsafe extern "C" fn(*mut connection) -> *const libc::c_char,
225    >,
226    pub blocking_connect: Option::<
227        unsafe extern "C" fn(
228            *mut connection,
229            *const libc::c_char,
230            libc::c_int,
231            libc::c_longlong,
232        ) -> libc::c_int,
233    >,
234    pub sync_write: Option::<
235        unsafe extern "C" fn(
236            *mut connection,
237            *mut libc::c_char,
238            ssize_t,
239            libc::c_longlong,
240        ) -> ssize_t,
241    >,
242    pub sync_read: Option::<
243        unsafe extern "C" fn(
244            *mut connection,
245            *mut libc::c_char,
246            ssize_t,
247            libc::c_longlong,
248        ) -> ssize_t,
249    >,
250    pub sync_readline: Option::<
251        unsafe extern "C" fn(
252            *mut connection,
253            *mut libc::c_char,
254            ssize_t,
255            libc::c_longlong,
256        ) -> ssize_t,
257    >,
258    pub get_type: Option::<unsafe extern "C" fn(*mut connection) -> libc::c_int>,
259}
260#[derive(Copy, Clone,c2rust_bitfields:: BitfieldStruct)]
261#[repr(C)]
262pub struct redisObject {
263    #[bitfield(name = "type_0", ty = "libc::c_uint", bits = "0..=3")]
264    #[bitfield(name = "encoding", ty = "libc::c_uint", bits = "4..=7")]
265    #[bitfield(name = "lru", ty = "libc::c_uint", bits = "8..=31")]
266    pub type_0_encoding_lru: [u8; 4],
267    pub refcount: libc::c_int,
268    pub ptr: *mut libc::c_void,
269}
270pub type atomic_int = libc::c_int;
271pub type atomic_uint = libc::c_uint;
272pub type atomic_llong = libc::c_longlong;
273pub type sig_atomic_t = __sig_atomic_t;
274#[derive(Copy, Clone)]
275#[repr(C)]
276pub struct hdr_histogram {
277    pub lowest_discernible_value: int64_t,
278    pub highest_trackable_value: int64_t,
279    pub unit_magnitude: int32_t,
280    pub significant_figures: int32_t,
281    pub sub_bucket_half_count_magnitude: int32_t,
282    pub sub_bucket_half_count: int32_t,
283    pub sub_bucket_mask: int64_t,
284    pub sub_bucket_count: int32_t,
285    pub bucket_count: int32_t,
286    pub min_value: int64_t,
287    pub max_value: int64_t,
288    pub normalizing_index_offset: int32_t,
289    pub conversion_ratio: libc::c_double,
290    pub counts_len: int32_t,
291    pub total_count: int64_t,
292    pub counts: *mut int64_t,
293}
294pub type mstime_t = libc::c_longlong;
295pub type ustime_t = libc::c_longlong;
296#[derive(Copy, Clone)]
297#[repr(C)]
298pub struct dictEntry {
299    pub key: *mut libc::c_void,
300    pub v: C2RustUnnamed,
301    pub next: *mut dictEntry,
302    pub metadata: [*mut libc::c_void; 0],
303}
304#[derive(Copy, Clone)]
305#[repr(C)]
306pub union C2RustUnnamed {
307    pub val: *mut libc::c_void,
308    pub u64_0: uint64_t,
309    pub s64: int64_t,
310    pub d: libc::c_double,
311}
312#[derive(Copy, Clone)]
313#[repr(C)]
314pub struct dict {
315    pub type_0: *mut dictType,
316    pub ht_table: [*mut *mut dictEntry; 2],
317    pub ht_used: [libc::c_ulong; 2],
318    pub rehashidx: libc::c_long,
319    pub pauserehash: int16_t,
320    pub ht_size_exp: [libc::c_schar; 2],
321}
322#[derive(Copy, Clone)]
323#[repr(C)]
324pub struct dictType {
325    pub hashFunction: Option::<unsafe extern "C" fn(*const libc::c_void) -> uint64_t>,
326    pub keyDup: Option::<
327        unsafe extern "C" fn(*mut dict, *const libc::c_void) -> *mut libc::c_void,
328    >,
329    pub valDup: Option::<
330        unsafe extern "C" fn(*mut dict, *const libc::c_void) -> *mut libc::c_void,
331    >,
332    pub keyCompare: Option::<
333        unsafe extern "C" fn(
334            *mut dict,
335            *const libc::c_void,
336            *const libc::c_void,
337        ) -> libc::c_int,
338    >,
339    pub keyDestructor: Option::<
340        unsafe extern "C" fn(*mut dict, *mut libc::c_void) -> (),
341    >,
342    pub valDestructor: Option::<
343        unsafe extern "C" fn(*mut dict, *mut libc::c_void) -> (),
344    >,
345    pub expandAllowed: Option::<
346        unsafe extern "C" fn(size_t, libc::c_double) -> libc::c_int,
347    >,
348    pub dictEntryMetadataBytes: Option::<unsafe extern "C" fn(*mut dict) -> size_t>,
349}
350#[derive(Copy, Clone)]
351#[repr(C)]
352pub struct listNode {
353    pub prev: *mut listNode,
354    pub next: *mut listNode,
355    pub value: *mut libc::c_void,
356}
357#[derive(Copy, Clone)]
358#[repr(C)]
359pub struct list {
360    pub head: *mut listNode,
361    pub tail: *mut listNode,
362    pub dup: Option::<unsafe extern "C" fn(*mut libc::c_void) -> *mut libc::c_void>,
363    pub free: Option::<unsafe extern "C" fn(*mut libc::c_void) -> ()>,
364    pub match_0: Option::<
365        unsafe extern "C" fn(*mut libc::c_void, *mut libc::c_void) -> libc::c_int,
366    >,
367    pub len: libc::c_ulong,
368}
369#[derive(Copy, Clone,c2rust_bitfields:: BitfieldStruct)]
370#[repr(C)]
371pub struct raxNode {
372    #[bitfield(name = "iskey", ty = "uint32_t", bits = "0..=0")]
373    #[bitfield(name = "isnull", ty = "uint32_t", bits = "1..=1")]
374    #[bitfield(name = "iscompr", ty = "uint32_t", bits = "2..=2")]
375    #[bitfield(name = "size", ty = "uint32_t", bits = "3..=31")]
376    pub iskey_isnull_iscompr_size: [u8; 4],
377    pub data: [libc::c_uchar; 0],
378}
379#[derive(Copy, Clone)]
380#[repr(C)]
381pub struct rax {
382    pub head: *mut raxNode,
383    pub numele: uint64_t,
384    pub numnodes: uint64_t,
385}
386#[derive(Copy, Clone)]
387#[repr(C)]
388pub struct raxStack {
389    pub stack: *mut *mut libc::c_void,
390    pub items: size_t,
391    pub maxitems: size_t,
392    pub static_items: [*mut libc::c_void; 32],
393    pub oom: libc::c_int,
394}
395pub type raxNodeCallback = Option::<
396    unsafe extern "C" fn(*mut *mut raxNode) -> libc::c_int,
397>;
398#[derive(Copy, Clone)]
399#[repr(C)]
400pub struct raxIterator {
401    pub flags: libc::c_int,
402    pub rt: *mut rax,
403    pub key: *mut libc::c_uchar,
404    pub data: *mut libc::c_void,
405    pub key_len: size_t,
406    pub key_max: size_t,
407    pub key_static_string: [libc::c_uchar; 128],
408    pub node: *mut raxNode,
409    pub stack: raxStack,
410    pub node_cb: raxNodeCallback,
411}
412pub type pause_type = libc::c_uint;
413pub const CLIENT_PAUSE_ALL: pause_type = 2;
414pub const CLIENT_PAUSE_WRITE: pause_type = 1;
415pub const CLIENT_PAUSE_OFF: pause_type = 0;
416#[derive(Copy, Clone)]
417#[repr(C)]
418pub struct pause_event {
419    pub type_0: pause_type,
420    pub end: mstime_t,
421}
422pub type robj = redisObject;
423pub type RedisModuleUserChangedFunc = Option::<
424    unsafe extern "C" fn(uint64_t, *mut libc::c_void) -> (),
425>;
426#[derive(Copy, Clone)]
427#[repr(C)]
428pub struct clusterSlotToKeyMapping {
429    pub by_slot: [slotToKeys; 16384],
430}
431#[derive(Copy, Clone)]
432#[repr(C)]
433pub struct slotToKeys {
434    pub count: uint64_t,
435    pub head: *mut dictEntry,
436}
437#[derive(Copy, Clone)]
438#[repr(C)]
439pub struct redisDb {
440    pub dict: *mut dict,
441    pub expires: *mut dict,
442    pub blocking_keys: *mut dict,
443    pub ready_keys: *mut dict,
444    pub watched_keys: *mut dict,
445    pub id: libc::c_int,
446    pub avg_ttl: libc::c_longlong,
447    pub expires_cursor: libc::c_ulong,
448    pub defrag_later: *mut list,
449    pub slots_to_keys: *mut clusterSlotToKeyMapping,
450}
451#[derive(Copy, Clone)]
452#[repr(C)]
453pub struct multiCmd {
454    pub argv: *mut *mut robj,
455    pub argv_len: libc::c_int,
456    pub argc: libc::c_int,
457    pub cmd: *mut redisCommand,
458}
459#[derive(Copy, Clone)]
460#[repr(C)]
461pub struct redisCommand {
462    pub declared_name: *const libc::c_char,
463    pub summary: *const libc::c_char,
464    pub complexity: *const libc::c_char,
465    pub since: *const libc::c_char,
466    pub doc_flags: libc::c_int,
467    pub replaced_by: *const libc::c_char,
468    pub deprecated_since: *const libc::c_char,
469    pub group: redisCommandGroup,
470    pub history: *mut commandHistory,
471    pub tips: *mut *const libc::c_char,
472    pub proc_0: Option::<redisCommandProc>,
473    pub arity: libc::c_int,
474    pub flags: uint64_t,
475    pub acl_categories: uint64_t,
476    pub key_specs_static: [keySpec; 4],
477    pub getkeys_proc: Option::<redisGetKeysProc>,
478    pub subcommands: *mut redisCommand,
479    pub args: *mut redisCommandArg,
480    pub microseconds: libc::c_longlong,
481    pub calls: libc::c_longlong,
482    pub rejected_calls: libc::c_longlong,
483    pub failed_calls: libc::c_longlong,
484    pub id: libc::c_int,
485    pub fullname: sds,
486    pub latency_histogram: *mut hdr_histogram,
487    pub key_specs: *mut keySpec,
488    pub legacy_range_key_spec: keySpec,
489    pub num_args: libc::c_int,
490    pub num_history: libc::c_int,
491    pub num_tips: libc::c_int,
492    pub key_specs_num: libc::c_int,
493    pub key_specs_max: libc::c_int,
494    pub subcommands_dict: *mut dict,
495    pub parent: *mut redisCommand,
496    pub module_cmd: *mut RedisModuleCommand,
497}
498#[derive(Copy, Clone)]
499#[repr(C)]
500pub struct keySpec {
501    pub notes: *const libc::c_char,
502    pub flags: uint64_t,
503    pub begin_search_type: kspec_bs_type,
504    pub bs: C2RustUnnamed_3,
505    pub find_keys_type: kspec_fk_type,
506    pub fk: C2RustUnnamed_0,
507}
508#[derive(Copy, Clone)]
509#[repr(C)]
510pub union C2RustUnnamed_0 {
511    pub range: C2RustUnnamed_2,
512    pub keynum: C2RustUnnamed_1,
513}
514#[derive(Copy, Clone)]
515#[repr(C)]
516pub struct C2RustUnnamed_1 {
517    pub keynumidx: libc::c_int,
518    pub firstkey: libc::c_int,
519    pub keystep: libc::c_int,
520}
521#[derive(Copy, Clone)]
522#[repr(C)]
523pub struct C2RustUnnamed_2 {
524    pub lastkey: libc::c_int,
525    pub keystep: libc::c_int,
526    pub limit: libc::c_int,
527}
528pub type kspec_fk_type = libc::c_uint;
529pub const KSPEC_FK_KEYNUM: kspec_fk_type = 3;
530pub const KSPEC_FK_RANGE: kspec_fk_type = 2;
531pub const KSPEC_FK_UNKNOWN: kspec_fk_type = 1;
532pub const KSPEC_FK_INVALID: kspec_fk_type = 0;
533#[derive(Copy, Clone)]
534#[repr(C)]
535pub union C2RustUnnamed_3 {
536    pub index: C2RustUnnamed_5,
537    pub keyword: C2RustUnnamed_4,
538}
539#[derive(Copy, Clone)]
540#[repr(C)]
541pub struct C2RustUnnamed_4 {
542    pub keyword: *const libc::c_char,
543    pub startfrom: libc::c_int,
544}
545#[derive(Copy, Clone)]
546#[repr(C)]
547pub struct C2RustUnnamed_5 {
548    pub pos: libc::c_int,
549}
550pub type kspec_bs_type = libc::c_uint;
551pub const KSPEC_BS_KEYWORD: kspec_bs_type = 3;
552pub const KSPEC_BS_INDEX: kspec_bs_type = 2;
553pub const KSPEC_BS_UNKNOWN: kspec_bs_type = 1;
554pub const KSPEC_BS_INVALID: kspec_bs_type = 0;
555#[derive(Copy, Clone)]
556#[repr(C)]
557pub struct redisCommandArg {
558    pub name: *const libc::c_char,
559    pub type_0: redisCommandArgType,
560    pub key_spec_index: libc::c_int,
561    pub token: *const libc::c_char,
562    pub summary: *const libc::c_char,
563    pub since: *const libc::c_char,
564    pub flags: libc::c_int,
565    pub deprecated_since: *const libc::c_char,
566    pub subargs: *mut redisCommandArg,
567    pub num_args: libc::c_int,
568}
569pub type redisCommandArgType = libc::c_uint;
570pub const ARG_TYPE_BLOCK: redisCommandArgType = 8;
571pub const ARG_TYPE_ONEOF: redisCommandArgType = 7;
572pub const ARG_TYPE_PURE_TOKEN: redisCommandArgType = 6;
573pub const ARG_TYPE_UNIX_TIME: redisCommandArgType = 5;
574pub const ARG_TYPE_PATTERN: redisCommandArgType = 4;
575pub const ARG_TYPE_KEY: redisCommandArgType = 3;
576pub const ARG_TYPE_DOUBLE: redisCommandArgType = 2;
577pub const ARG_TYPE_INTEGER: redisCommandArgType = 1;
578pub const ARG_TYPE_STRING: redisCommandArgType = 0;
579pub type redisGetKeysProc = unsafe extern "C" fn(
580    *mut redisCommand,
581    *mut *mut robj,
582    libc::c_int,
583    *mut getKeysResult,
584) -> libc::c_int;
585#[derive(Copy, Clone)]
586#[repr(C)]
587pub struct getKeysResult {
588    pub keysbuf: [keyReference; 256],
589    pub keys: *mut keyReference,
590    pub numkeys: libc::c_int,
591    pub size: libc::c_int,
592}
593#[derive(Copy, Clone)]
594#[repr(C)]
595pub struct keyReference {
596    pub pos: libc::c_int,
597    pub flags: libc::c_int,
598}
599pub type redisCommandProc = unsafe extern "C" fn(*mut client) -> ();
600#[derive(Copy, Clone)]
601#[repr(C)]
602pub struct client {
603    pub id: uint64_t,
604    pub flags: uint64_t,
605    pub conn: *mut connection,
606    pub resp: libc::c_int,
607    pub db: *mut redisDb,
608    pub name: *mut robj,
609    pub querybuf: sds,
610    pub qb_pos: size_t,
611    pub querybuf_peak: size_t,
612    pub argc: libc::c_int,
613    pub argv: *mut *mut robj,
614    pub argv_len: libc::c_int,
615    pub original_argc: libc::c_int,
616    pub original_argv: *mut *mut robj,
617    pub argv_len_sum: size_t,
618    pub cmd: *mut redisCommand,
619    pub lastcmd: *mut redisCommand,
620    pub realcmd: *mut redisCommand,
621    pub user: *mut user,
622    pub reqtype: libc::c_int,
623    pub multibulklen: libc::c_int,
624    pub bulklen: libc::c_long,
625    pub reply: *mut list,
626    pub reply_bytes: libc::c_ulonglong,
627    pub deferred_reply_errors: *mut list,
628    pub sentlen: size_t,
629    pub ctime: time_t,
630    pub duration: libc::c_long,
631    pub slot: libc::c_int,
632    pub cur_script: *mut dictEntry,
633    pub lastinteraction: time_t,
634    pub obuf_soft_limit_reached_time: time_t,
635    pub authenticated: libc::c_int,
636    pub replstate: libc::c_int,
637    pub repl_start_cmd_stream_on_ack: libc::c_int,
638    pub repldbfd: libc::c_int,
639    pub repldboff: off_t,
640    pub repldbsize: off_t,
641    pub replpreamble: sds,
642    pub read_reploff: libc::c_longlong,
643    pub reploff: libc::c_longlong,
644    pub repl_applied: libc::c_longlong,
645    pub repl_ack_off: libc::c_longlong,
646    pub repl_ack_time: libc::c_longlong,
647    pub repl_last_partial_write: libc::c_longlong,
648    pub psync_initial_offset: libc::c_longlong,
649    pub replid: [libc::c_char; 41],
650    pub slave_listening_port: libc::c_int,
651    pub slave_addr: *mut libc::c_char,
652    pub slave_capa: libc::c_int,
653    pub slave_req: libc::c_int,
654    pub mstate: multiState,
655    pub btype: libc::c_int,
656    pub bpop: blockingState,
657    pub woff: libc::c_longlong,
658    pub watched_keys: *mut list,
659    pub pubsub_channels: *mut dict,
660    pub pubsub_patterns: *mut list,
661    pub pubsubshard_channels: *mut dict,
662    pub peerid: sds,
663    pub sockname: sds,
664    pub client_list_node: *mut listNode,
665    pub postponed_list_node: *mut listNode,
666    pub pending_read_list_node: *mut listNode,
667    pub auth_callback: RedisModuleUserChangedFunc,
668    pub auth_callback_privdata: *mut libc::c_void,
669    pub auth_module: *mut libc::c_void,
670    pub client_tracking_redirection: uint64_t,
671    pub client_tracking_prefixes: *mut rax,
672    pub last_memory_usage: size_t,
673    pub last_memory_type: libc::c_int,
674    pub mem_usage_bucket_node: *mut listNode,
675    pub mem_usage_bucket: *mut clientMemUsageBucket,
676    pub ref_repl_buf_node: *mut listNode,
677    pub ref_block_pos: size_t,
678    pub buf_peak: size_t,
679    pub buf_peak_last_reset_time: mstime_t,
680    pub bufpos: libc::c_int,
681    pub buf_usable_size: size_t,
682    pub buf: *mut libc::c_char,
683}
684#[derive(Copy, Clone)]
685#[repr(C)]
686pub struct clientMemUsageBucket {
687    pub clients: *mut list,
688    pub mem_usage_sum: size_t,
689}
690#[derive(Copy, Clone)]
691#[repr(C)]
692pub struct blockingState {
693    pub count: libc::c_long,
694    pub timeout: mstime_t,
695    pub keys: *mut dict,
696    pub target: *mut robj,
697    pub blockpos: blockPos,
698    pub xread_count: size_t,
699    pub xread_group: *mut robj,
700    pub xread_consumer: *mut robj,
701    pub xread_group_noack: libc::c_int,
702    pub numreplicas: libc::c_int,
703    pub reploffset: libc::c_longlong,
704    pub module_blocked_handle: *mut libc::c_void,
705}
706#[derive(Copy, Clone)]
707#[repr(C)]
708pub struct blockPos {
709    pub wherefrom: libc::c_int,
710    pub whereto: libc::c_int,
711}
712#[derive(Copy, Clone)]
713#[repr(C)]
714pub struct multiState {
715    pub commands: *mut multiCmd,
716    pub count: libc::c_int,
717    pub cmd_flags: libc::c_int,
718    pub cmd_inv_flags: libc::c_int,
719    pub argv_len_sums: size_t,
720    pub alloc_count: libc::c_int,
721}
722#[derive(Copy, Clone)]
723#[repr(C)]
724pub struct user {
725    pub name: sds,
726    pub flags: uint32_t,
727    pub passwords: *mut list,
728    pub selectors: *mut list,
729    pub acl_string: *mut robj,
730}
731#[derive(Copy, Clone)]
732#[repr(C)]
733pub struct commandHistory {
734    pub since: *const libc::c_char,
735    pub changes: *const libc::c_char,
736}
737pub type redisCommandGroup = libc::c_uint;
738pub const COMMAND_GROUP_MODULE: redisCommandGroup = 17;
739pub const COMMAND_GROUP_BITMAP: redisCommandGroup = 16;
740pub const COMMAND_GROUP_STREAM: redisCommandGroup = 15;
741pub const COMMAND_GROUP_GEO: redisCommandGroup = 14;
742pub const COMMAND_GROUP_SENTINEL: redisCommandGroup = 13;
743pub const COMMAND_GROUP_CLUSTER: redisCommandGroup = 12;
744pub const COMMAND_GROUP_HYPERLOGLOG: redisCommandGroup = 11;
745pub const COMMAND_GROUP_SCRIPTING: redisCommandGroup = 10;
746pub const COMMAND_GROUP_SERVER: redisCommandGroup = 9;
747pub const COMMAND_GROUP_CONNECTION: redisCommandGroup = 8;
748pub const COMMAND_GROUP_TRANSACTIONS: redisCommandGroup = 7;
749pub const COMMAND_GROUP_PUBSUB: redisCommandGroup = 6;
750pub const COMMAND_GROUP_HASH: redisCommandGroup = 5;
751pub const COMMAND_GROUP_SORTED_SET: redisCommandGroup = 4;
752pub const COMMAND_GROUP_SET: redisCommandGroup = 3;
753pub const COMMAND_GROUP_LIST: redisCommandGroup = 2;
754pub const COMMAND_GROUP_STRING: redisCommandGroup = 1;
755pub const COMMAND_GROUP_GENERIC: redisCommandGroup = 0;
756#[derive(Copy, Clone)]
757#[repr(C)]
758pub struct replBacklog {
759    pub ref_repl_buf_node: *mut listNode,
760    pub unindexed_count: size_t,
761    pub blocks_index: *mut rax,
762    pub histlen: libc::c_longlong,
763    pub offset: libc::c_longlong,
764}
765#[derive(Copy, Clone)]
766#[repr(C)]
767pub struct saveparam {
768    pub seconds: time_t,
769    pub changes: libc::c_int,
770}
771#[derive(Copy, Clone)]
772#[repr(C)]
773pub struct sentinelConfig {
774    pub pre_monitor_cfg: *mut list,
775    pub monitor_cfg: *mut list,
776    pub post_monitor_cfg: *mut list,
777}
778#[derive(Copy, Clone)]
779#[repr(C)]
780pub struct clientBufferLimitsConfig {
781    pub hard_limit_bytes: libc::c_ulonglong,
782    pub soft_limit_bytes: libc::c_ulonglong,
783    pub soft_limit_seconds: time_t,
784}
785#[derive(Copy, Clone)]
786#[repr(C)]
787pub struct redisOp {
788    pub argv: *mut *mut robj,
789    pub argc: libc::c_int,
790    pub dbid: libc::c_int,
791    pub target: libc::c_int,
792}
793#[derive(Copy, Clone)]
794#[repr(C)]
795pub struct redisOpArray {
796    pub ops: *mut redisOp,
797    pub numops: libc::c_int,
798    pub capacity: libc::c_int,
799}
800#[derive(Copy, Clone)]
801#[repr(C)]
802pub struct malloc_stats {
803    pub zmalloc_used: size_t,
804    pub process_rss: size_t,
805    pub allocator_allocated: size_t,
806    pub allocator_active: size_t,
807    pub allocator_resident: size_t,
808}
809#[derive(Copy, Clone)]
810#[repr(C)]
811pub struct socketFds {
812    pub fd: [libc::c_int; 16],
813    pub count: libc::c_int,
814}
815#[derive(Copy, Clone)]
816#[repr(C)]
817pub struct redisTLSContextConfig {
818    pub cert_file: *mut libc::c_char,
819    pub key_file: *mut libc::c_char,
820    pub key_file_pass: *mut libc::c_char,
821    pub client_cert_file: *mut libc::c_char,
822    pub client_key_file: *mut libc::c_char,
823    pub client_key_file_pass: *mut libc::c_char,
824    pub dh_params_file: *mut libc::c_char,
825    pub ca_cert_file: *mut libc::c_char,
826    pub ca_cert_dir: *mut libc::c_char,
827    pub protocols: *mut libc::c_char,
828    pub ciphers: *mut libc::c_char,
829    pub ciphersuites: *mut libc::c_char,
830    pub prefer_server_ciphers: libc::c_int,
831    pub session_caching: libc::c_int,
832    pub session_cache_size: libc::c_int,
833    pub session_cache_timeout: libc::c_int,
834}
835pub type aof_file_type = libc::c_uint;
836pub const AOF_FILE_TYPE_INCR: aof_file_type = 105;
837pub const AOF_FILE_TYPE_HIST: aof_file_type = 104;
838pub const AOF_FILE_TYPE_BASE: aof_file_type = 98;
839#[derive(Copy, Clone)]
840#[repr(C)]
841pub struct aofInfo {
842    pub file_name: sds,
843    pub file_seq: libc::c_longlong,
844    pub file_type: aof_file_type,
845}
846#[derive(Copy, Clone)]
847#[repr(C)]
848pub struct aofManifest {
849    pub base_aof_info: *mut aofInfo,
850    pub incr_aof_list: *mut list,
851    pub history_aof_list: *mut list,
852    pub curr_base_file_seq: libc::c_longlong,
853    pub curr_incr_file_seq: libc::c_longlong,
854    pub dirty: libc::c_int,
855}
856#[derive(Copy, Clone)]
857#[repr(C)]
858pub struct redisServer {
859    pub pid: pid_t,
860    pub main_thread_id: pthread_t,
861    pub configfile: *mut libc::c_char,
862    pub executable: *mut libc::c_char,
863    pub exec_argv: *mut *mut libc::c_char,
864    pub dynamic_hz: libc::c_int,
865    pub config_hz: libc::c_int,
866    pub umask: mode_t,
867    pub hz: libc::c_int,
868    pub in_fork_child: libc::c_int,
869    pub db: *mut redisDb,
870    pub commands: *mut dict,
871    pub orig_commands: *mut dict,
872    pub el: *mut aeEventLoop,
873    pub errors: *mut rax,
874    pub lruclock: atomic_uint,
875    pub shutdown_asap: sig_atomic_t,
876    pub shutdown_mstime: mstime_t,
877    pub last_sig_received: libc::c_int,
878    pub shutdown_flags: libc::c_int,
879    pub activerehashing: libc::c_int,
880    pub active_defrag_running: libc::c_int,
881    pub pidfile: *mut libc::c_char,
882    pub arch_bits: libc::c_int,
883    pub cronloops: libc::c_int,
884    pub runid: [libc::c_char; 41],
885    pub sentinel_mode: libc::c_int,
886    pub initial_memory_usage: size_t,
887    pub always_show_logo: libc::c_int,
888    pub in_exec: libc::c_int,
889    pub busy_module_yield_flags: libc::c_int,
890    pub busy_module_yield_reply: *const libc::c_char,
891    pub core_propagates: libc::c_int,
892    pub propagate_no_multi: libc::c_int,
893    pub module_ctx_nesting: libc::c_int,
894    pub ignore_warnings: *mut libc::c_char,
895    pub client_pause_in_transaction: libc::c_int,
896    pub thp_enabled: libc::c_int,
897    pub page_size: size_t,
898    pub moduleapi: *mut dict,
899    pub sharedapi: *mut dict,
900    pub module_configs_queue: *mut dict,
901    pub loadmodule_queue: *mut list,
902    pub module_pipe: [libc::c_int; 2],
903    pub child_pid: pid_t,
904    pub child_type: libc::c_int,
905    pub port: libc::c_int,
906    pub tls_port: libc::c_int,
907    pub tcp_backlog: libc::c_int,
908    pub bindaddr: [*mut libc::c_char; 16],
909    pub bindaddr_count: libc::c_int,
910    pub bind_source_addr: *mut libc::c_char,
911    pub unixsocket: *mut libc::c_char,
912    pub unixsocketperm: libc::c_uint,
913    pub ipfd: socketFds,
914    pub tlsfd: socketFds,
915    pub sofd: libc::c_int,
916    pub socket_mark_id: uint32_t,
917    pub cfd: socketFds,
918    pub clients: *mut list,
919    pub clients_to_close: *mut list,
920    pub clients_pending_write: *mut list,
921    pub clients_pending_read: *mut list,
922    pub slaves: *mut list,
923    pub monitors: *mut list,
924    pub current_client: *mut client,
925    pub client_mem_usage_buckets: *mut clientMemUsageBucket,
926    pub clients_timeout_table: *mut rax,
927    pub fixed_time_expire: libc::c_long,
928    pub in_nested_call: libc::c_int,
929    pub clients_index: *mut rax,
930    pub client_pause_type: pause_type,
931    pub postponed_clients: *mut list,
932    pub client_pause_end_time: mstime_t,
933    pub client_pause_per_purpose: [*mut pause_event; 3],
934    pub neterr: [libc::c_char; 256],
935    pub migrate_cached_sockets: *mut dict,
936    pub next_client_id: uint_least64_t,
937    pub protected_mode: libc::c_int,
938    pub io_threads_num: libc::c_int,
939    pub io_threads_do_reads: libc::c_int,
940    pub io_threads_active: libc::c_int,
941    pub events_processed_while_blocked: libc::c_longlong,
942    pub enable_protected_configs: libc::c_int,
943    pub enable_debug_cmd: libc::c_int,
944    pub enable_module_cmd: libc::c_int,
945    pub loading: sig_atomic_t,
946    pub async_loading: sig_atomic_t,
947    pub loading_total_bytes: off_t,
948    pub loading_rdb_used_mem: off_t,
949    pub loading_loaded_bytes: off_t,
950    pub loading_start_time: time_t,
951    pub loading_process_events_interval_bytes: off_t,
952    pub stat_starttime: time_t,
953    pub stat_numcommands: libc::c_longlong,
954    pub stat_numconnections: libc::c_longlong,
955    pub stat_expiredkeys: libc::c_longlong,
956    pub stat_expired_stale_perc: libc::c_double,
957    pub stat_expired_time_cap_reached_count: libc::c_longlong,
958    pub stat_expire_cycle_time_used: libc::c_longlong,
959    pub stat_evictedkeys: libc::c_longlong,
960    pub stat_evictedclients: libc::c_longlong,
961    pub stat_total_eviction_exceeded_time: libc::c_longlong,
962    pub stat_last_eviction_exceeded_time: monotime,
963    pub stat_keyspace_hits: libc::c_longlong,
964    pub stat_keyspace_misses: libc::c_longlong,
965    pub stat_active_defrag_hits: libc::c_longlong,
966    pub stat_active_defrag_misses: libc::c_longlong,
967    pub stat_active_defrag_key_hits: libc::c_longlong,
968    pub stat_active_defrag_key_misses: libc::c_longlong,
969    pub stat_active_defrag_scanned: libc::c_longlong,
970    pub stat_total_active_defrag_time: libc::c_longlong,
971    pub stat_last_active_defrag_time: monotime,
972    pub stat_peak_memory: size_t,
973    pub stat_aof_rewrites: libc::c_longlong,
974    pub stat_aofrw_consecutive_failures: libc::c_longlong,
975    pub stat_rdb_saves: libc::c_longlong,
976    pub stat_fork_time: libc::c_longlong,
977    pub stat_fork_rate: libc::c_double,
978    pub stat_total_forks: libc::c_longlong,
979    pub stat_rejected_conn: libc::c_longlong,
980    pub stat_sync_full: libc::c_longlong,
981    pub stat_sync_partial_ok: libc::c_longlong,
982    pub stat_sync_partial_err: libc::c_longlong,
983    pub slowlog: *mut list,
984    pub slowlog_entry_id: libc::c_longlong,
985    pub slowlog_log_slower_than: libc::c_longlong,
986    pub slowlog_max_len: libc::c_ulong,
987    pub cron_malloc_stats: malloc_stats,
988    pub stat_net_input_bytes: atomic_llong,
989    pub stat_net_output_bytes: atomic_llong,
990    pub stat_net_repl_input_bytes: atomic_llong,
991    pub stat_net_repl_output_bytes: atomic_llong,
992    pub stat_current_cow_peak: size_t,
993    pub stat_current_cow_bytes: size_t,
994    pub stat_current_cow_updated: monotime,
995    pub stat_current_save_keys_processed: size_t,
996    pub stat_current_save_keys_total: size_t,
997    pub stat_rdb_cow_bytes: size_t,
998    pub stat_aof_cow_bytes: size_t,
999    pub stat_module_cow_bytes: size_t,
1000    pub stat_module_progress: libc::c_double,
1001    pub stat_clients_type_memory: [size_t; 4],
1002    pub stat_cluster_links_memory: size_t,
1003    pub stat_unexpected_error_replies: libc::c_longlong,
1004    pub stat_total_error_replies: libc::c_longlong,
1005    pub stat_dump_payload_sanitizations: libc::c_longlong,
1006    pub stat_io_reads_processed: libc::c_longlong,
1007    pub stat_io_writes_processed: libc::c_longlong,
1008    pub stat_total_reads_processed: atomic_llong,
1009    pub stat_total_writes_processed: atomic_llong,
1010    pub inst_metric: [C2RustUnnamed_6; 5],
1011    pub stat_reply_buffer_shrinks: libc::c_longlong,
1012    pub stat_reply_buffer_expands: libc::c_longlong,
1013    pub verbosity: libc::c_int,
1014    pub maxidletime: libc::c_int,
1015    pub tcpkeepalive: libc::c_int,
1016    pub active_expire_enabled: libc::c_int,
1017    pub active_expire_effort: libc::c_int,
1018    pub active_defrag_enabled: libc::c_int,
1019    pub sanitize_dump_payload: libc::c_int,
1020    pub skip_checksum_validation: libc::c_int,
1021    pub jemalloc_bg_thread: libc::c_int,
1022    pub active_defrag_ignore_bytes: size_t,
1023    pub active_defrag_threshold_lower: libc::c_int,
1024    pub active_defrag_threshold_upper: libc::c_int,
1025    pub active_defrag_cycle_min: libc::c_int,
1026    pub active_defrag_cycle_max: libc::c_int,
1027    pub active_defrag_max_scan_fields: libc::c_ulong,
1028    pub client_max_querybuf_len: size_t,
1029    pub dbnum: libc::c_int,
1030    pub supervised: libc::c_int,
1031    pub supervised_mode: libc::c_int,
1032    pub daemonize: libc::c_int,
1033    pub set_proc_title: libc::c_int,
1034    pub proc_title_template: *mut libc::c_char,
1035    pub client_obuf_limits: [clientBufferLimitsConfig; 3],
1036    pub pause_cron: libc::c_int,
1037    pub latency_tracking_enabled: libc::c_int,
1038    pub latency_tracking_info_percentiles: *mut libc::c_double,
1039    pub latency_tracking_info_percentiles_len: libc::c_int,
1040    pub aof_enabled: libc::c_int,
1041    pub aof_state: libc::c_int,
1042    pub aof_fsync: libc::c_int,
1043    pub aof_filename: *mut libc::c_char,
1044    pub aof_dirname: *mut libc::c_char,
1045    pub aof_no_fsync_on_rewrite: libc::c_int,
1046    pub aof_rewrite_perc: libc::c_int,
1047    pub aof_rewrite_min_size: off_t,
1048    pub aof_rewrite_base_size: off_t,
1049    pub aof_current_size: off_t,
1050    pub aof_last_incr_size: off_t,
1051    pub aof_fsync_offset: off_t,
1052    pub aof_flush_sleep: libc::c_int,
1053    pub aof_rewrite_scheduled: libc::c_int,
1054    pub aof_buf: sds,
1055    pub aof_fd: libc::c_int,
1056    pub aof_selected_db: libc::c_int,
1057    pub aof_flush_postponed_start: time_t,
1058    pub aof_last_fsync: time_t,
1059    pub aof_rewrite_time_last: time_t,
1060    pub aof_rewrite_time_start: time_t,
1061    pub aof_cur_timestamp: time_t,
1062    pub aof_timestamp_enabled: libc::c_int,
1063    pub aof_lastbgrewrite_status: libc::c_int,
1064    pub aof_delayed_fsync: libc::c_ulong,
1065    pub aof_rewrite_incremental_fsync: libc::c_int,
1066    pub rdb_save_incremental_fsync: libc::c_int,
1067    pub aof_last_write_status: libc::c_int,
1068    pub aof_last_write_errno: libc::c_int,
1069    pub aof_load_truncated: libc::c_int,
1070    pub aof_use_rdb_preamble: libc::c_int,
1071    pub aof_bio_fsync_status: atomic_int,
1072    pub aof_bio_fsync_errno: atomic_int,
1073    pub aof_manifest: *mut aofManifest,
1074    pub aof_disable_auto_gc: libc::c_int,
1075    pub dirty: libc::c_longlong,
1076    pub dirty_before_bgsave: libc::c_longlong,
1077    pub rdb_last_load_keys_expired: libc::c_longlong,
1078    pub rdb_last_load_keys_loaded: libc::c_longlong,
1079    pub saveparams: *mut saveparam,
1080    pub saveparamslen: libc::c_int,
1081    pub rdb_filename: *mut libc::c_char,
1082    pub rdb_compression: libc::c_int,
1083    pub rdb_checksum: libc::c_int,
1084    pub rdb_del_sync_files: libc::c_int,
1085    pub lastsave: time_t,
1086    pub lastbgsave_try: time_t,
1087    pub rdb_save_time_last: time_t,
1088    pub rdb_save_time_start: time_t,
1089    pub rdb_bgsave_scheduled: libc::c_int,
1090    pub rdb_child_type: libc::c_int,
1091    pub lastbgsave_status: libc::c_int,
1092    pub stop_writes_on_bgsave_err: libc::c_int,
1093    pub rdb_pipe_read: libc::c_int,
1094    pub rdb_child_exit_pipe: libc::c_int,
1095    pub rdb_pipe_conns: *mut *mut connection,
1096    pub rdb_pipe_numconns: libc::c_int,
1097    pub rdb_pipe_numconns_writing: libc::c_int,
1098    pub rdb_pipe_buff: *mut libc::c_char,
1099    pub rdb_pipe_bufflen: libc::c_int,
1100    pub rdb_key_save_delay: libc::c_int,
1101    pub key_load_delay: libc::c_int,
1102    pub child_info_pipe: [libc::c_int; 2],
1103    pub child_info_nread: libc::c_int,
1104    pub also_propagate: redisOpArray,
1105    pub replication_allowed: libc::c_int,
1106    pub logfile: *mut libc::c_char,
1107    pub syslog_enabled: libc::c_int,
1108    pub syslog_ident: *mut libc::c_char,
1109    pub syslog_facility: libc::c_int,
1110    pub crashlog_enabled: libc::c_int,
1111    pub memcheck_enabled: libc::c_int,
1112    pub use_exit_on_panic: libc::c_int,
1113    pub shutdown_timeout: libc::c_int,
1114    pub shutdown_on_sigint: libc::c_int,
1115    pub shutdown_on_sigterm: libc::c_int,
1116    pub replid: [libc::c_char; 41],
1117    pub replid2: [libc::c_char; 41],
1118    pub master_repl_offset: libc::c_longlong,
1119    pub second_replid_offset: libc::c_longlong,
1120    pub slaveseldb: libc::c_int,
1121    pub repl_ping_slave_period: libc::c_int,
1122    pub repl_backlog: *mut replBacklog,
1123    pub repl_backlog_size: libc::c_longlong,
1124    pub repl_backlog_time_limit: time_t,
1125    pub repl_no_slaves_since: time_t,
1126    pub repl_min_slaves_to_write: libc::c_int,
1127    pub repl_min_slaves_max_lag: libc::c_int,
1128    pub repl_good_slaves_count: libc::c_int,
1129    pub repl_diskless_sync: libc::c_int,
1130    pub repl_diskless_load: libc::c_int,
1131    pub repl_diskless_sync_delay: libc::c_int,
1132    pub repl_diskless_sync_max_replicas: libc::c_int,
1133    pub repl_buffer_mem: size_t,
1134    pub repl_buffer_blocks: *mut list,
1135    pub masteruser: *mut libc::c_char,
1136    pub masterauth: sds,
1137    pub masterhost: *mut libc::c_char,
1138    pub masterport: libc::c_int,
1139    pub repl_timeout: libc::c_int,
1140    pub master: *mut client,
1141    pub cached_master: *mut client,
1142    pub repl_syncio_timeout: libc::c_int,
1143    pub repl_state: libc::c_int,
1144    pub repl_transfer_size: off_t,
1145    pub repl_transfer_read: off_t,
1146    pub repl_transfer_last_fsync_off: off_t,
1147    pub repl_transfer_s: *mut connection,
1148    pub repl_transfer_fd: libc::c_int,
1149    pub repl_transfer_tmpfile: *mut libc::c_char,
1150    pub repl_transfer_lastio: time_t,
1151    pub repl_serve_stale_data: libc::c_int,
1152    pub repl_slave_ro: libc::c_int,
1153    pub repl_slave_ignore_maxmemory: libc::c_int,
1154    pub repl_down_since: time_t,
1155    pub repl_disable_tcp_nodelay: libc::c_int,
1156    pub slave_priority: libc::c_int,
1157    pub replica_announced: libc::c_int,
1158    pub slave_announce_port: libc::c_int,
1159    pub slave_announce_ip: *mut libc::c_char,
1160    pub propagation_error_behavior: libc::c_int,
1161    pub repl_ignore_disk_write_error: libc::c_int,
1162    pub master_replid: [libc::c_char; 41],
1163    pub master_initial_offset: libc::c_longlong,
1164    pub repl_slave_lazy_flush: libc::c_int,
1165    pub clients_waiting_acks: *mut list,
1166    pub get_ack_from_slaves: libc::c_int,
1167    pub maxclients: libc::c_uint,
1168    pub maxmemory: libc::c_ulonglong,
1169    pub maxmemory_clients: ssize_t,
1170    pub maxmemory_policy: libc::c_int,
1171    pub maxmemory_samples: libc::c_int,
1172    pub maxmemory_eviction_tenacity: libc::c_int,
1173    pub lfu_log_factor: libc::c_int,
1174    pub lfu_decay_time: libc::c_int,
1175    pub proto_max_bulk_len: libc::c_longlong,
1176    pub oom_score_adj_values: [libc::c_int; 3],
1177    pub oom_score_adj: libc::c_int,
1178    pub disable_thp: libc::c_int,
1179    pub blocked_clients: libc::c_uint,
1180    pub blocked_clients_by_type: [libc::c_uint; 8],
1181    pub unblocked_clients: *mut list,
1182    pub ready_keys: *mut list,
1183    pub tracking_clients: libc::c_uint,
1184    pub tracking_table_max_keys: size_t,
1185    pub tracking_pending_keys: *mut list,
1186    pub sort_desc: libc::c_int,
1187    pub sort_alpha: libc::c_int,
1188    pub sort_bypattern: libc::c_int,
1189    pub sort_store: libc::c_int,
1190    pub hash_max_listpack_entries: size_t,
1191    pub hash_max_listpack_value: size_t,
1192    pub set_max_intset_entries: size_t,
1193    pub zset_max_listpack_entries: size_t,
1194    pub zset_max_listpack_value: size_t,
1195    pub hll_sparse_max_bytes: size_t,
1196    pub stream_node_max_bytes: size_t,
1197    pub stream_node_max_entries: libc::c_longlong,
1198    pub list_max_listpack_size: libc::c_int,
1199    pub list_compress_depth: libc::c_int,
1200    pub unixtime: atomic_int,
1201    pub timezone: time_t,
1202    pub daylight_active: libc::c_int,
1203    pub mstime: mstime_t,
1204    pub ustime: ustime_t,
1205    pub blocking_op_nesting: size_t,
1206    pub blocked_last_cron: libc::c_longlong,
1207    pub pubsub_channels: *mut dict,
1208    pub pubsub_patterns: *mut dict,
1209    pub notify_keyspace_events: libc::c_int,
1210    pub pubsubshard_channels: *mut dict,
1211    pub cluster_enabled: libc::c_int,
1212    pub cluster_port: libc::c_int,
1213    pub cluster_node_timeout: mstime_t,
1214    pub cluster_configfile: *mut libc::c_char,
1215    pub cluster: *mut clusterState,
1216    pub cluster_migration_barrier: libc::c_int,
1217    pub cluster_allow_replica_migration: libc::c_int,
1218    pub cluster_slave_validity_factor: libc::c_int,
1219    pub cluster_require_full_coverage: libc::c_int,
1220    pub cluster_slave_no_failover: libc::c_int,
1221    pub cluster_announce_ip: *mut libc::c_char,
1222    pub cluster_announce_hostname: *mut libc::c_char,
1223    pub cluster_preferred_endpoint_type: libc::c_int,
1224    pub cluster_announce_port: libc::c_int,
1225    pub cluster_announce_tls_port: libc::c_int,
1226    pub cluster_announce_bus_port: libc::c_int,
1227    pub cluster_module_flags: libc::c_int,
1228    pub cluster_allow_reads_when_down: libc::c_int,
1229    pub cluster_config_file_lock_fd: libc::c_int,
1230    pub cluster_link_sendbuf_limit_bytes: libc::c_ulonglong,
1231    pub cluster_drop_packet_filter: libc::c_int,
1232    pub script_caller: *mut client,
1233    pub busy_reply_threshold: mstime_t,
1234    pub pre_command_oom_state: libc::c_int,
1235    pub script_disable_deny_script: libc::c_int,
1236    pub lazyfree_lazy_eviction: libc::c_int,
1237    pub lazyfree_lazy_expire: libc::c_int,
1238    pub lazyfree_lazy_server_del: libc::c_int,
1239    pub lazyfree_lazy_user_del: libc::c_int,
1240    pub lazyfree_lazy_user_flush: libc::c_int,
1241    pub latency_monitor_threshold: libc::c_longlong,
1242    pub latency_events: *mut dict,
1243    pub acl_filename: *mut libc::c_char,
1244    pub acllog_max_len: libc::c_ulong,
1245    pub requirepass: sds,
1246    pub acl_pubsub_default: libc::c_int,
1247    pub watchdog_period: libc::c_int,
1248    pub system_memory_size: size_t,
1249    pub tls_cluster: libc::c_int,
1250    pub tls_replication: libc::c_int,
1251    pub tls_auth_clients: libc::c_int,
1252    pub tls_ctx_config: redisTLSContextConfig,
1253    pub server_cpulist: *mut libc::c_char,
1254    pub bio_cpulist: *mut libc::c_char,
1255    pub aof_rewrite_cpulist: *mut libc::c_char,
1256    pub bgsave_cpulist: *mut libc::c_char,
1257    pub sentinel_config: *mut sentinelConfig,
1258    pub failover_end_time: mstime_t,
1259    pub force_failover: libc::c_int,
1260    pub target_replica_host: *mut libc::c_char,
1261    pub target_replica_port: libc::c_int,
1262    pub failover_state: libc::c_int,
1263    pub cluster_allow_pubsubshard_when_down: libc::c_int,
1264    pub reply_buffer_peak_reset_time: libc::c_long,
1265    pub reply_buffer_resizing_enabled: libc::c_int,
1266}
1267#[derive(Copy, Clone)]
1268#[repr(C)]
1269pub struct clusterState {
1270    pub myself: *mut clusterNode,
1271    pub currentEpoch: uint64_t,
1272    pub state: libc::c_int,
1273    pub size: libc::c_int,
1274    pub nodes: *mut dict,
1275    pub nodes_black_list: *mut dict,
1276    pub migrating_slots_to: [*mut clusterNode; 16384],
1277    pub importing_slots_from: [*mut clusterNode; 16384],
1278    pub slots: [*mut clusterNode; 16384],
1279    pub slots_to_channels: *mut rax,
1280    pub failover_auth_time: mstime_t,
1281    pub failover_auth_count: libc::c_int,
1282    pub failover_auth_sent: libc::c_int,
1283    pub failover_auth_rank: libc::c_int,
1284    pub failover_auth_epoch: uint64_t,
1285    pub cant_failover_reason: libc::c_int,
1286    pub mf_end: mstime_t,
1287    pub mf_slave: *mut clusterNode,
1288    pub mf_master_offset: libc::c_longlong,
1289    pub mf_can_start: libc::c_int,
1290    pub lastVoteEpoch: uint64_t,
1291    pub todo_before_sleep: libc::c_int,
1292    pub stats_bus_messages_sent: [libc::c_longlong; 11],
1293    pub stats_bus_messages_received: [libc::c_longlong; 11],
1294    pub stats_pfail_nodes: libc::c_longlong,
1295    pub stat_cluster_links_buffer_limit_exceeded: libc::c_ulonglong,
1296}
1297#[derive(Copy, Clone)]
1298#[repr(C)]
1299pub struct clusterNode {
1300    pub ctime: mstime_t,
1301    pub name: [libc::c_char; 40],
1302    pub flags: libc::c_int,
1303    pub configEpoch: uint64_t,
1304    pub slots: [libc::c_uchar; 2048],
1305    pub slot_info_pairs: *mut uint16_t,
1306    pub slot_info_pairs_count: libc::c_int,
1307    pub numslots: libc::c_int,
1308    pub numslaves: libc::c_int,
1309    pub slaves: *mut *mut clusterNode,
1310    pub slaveof: *mut clusterNode,
1311    pub last_in_ping_gossip: libc::c_ulonglong,
1312    pub ping_sent: mstime_t,
1313    pub pong_received: mstime_t,
1314    pub data_received: mstime_t,
1315    pub fail_time: mstime_t,
1316    pub voted_time: mstime_t,
1317    pub repl_offset_time: mstime_t,
1318    pub orphaned_time: mstime_t,
1319    pub repl_offset: libc::c_longlong,
1320    pub ip: [libc::c_char; 46],
1321    pub hostname: sds,
1322    pub port: libc::c_int,
1323    pub pport: libc::c_int,
1324    pub cport: libc::c_int,
1325    pub link: *mut clusterLink,
1326    pub inbound_link: *mut clusterLink,
1327    pub fail_reports: *mut list,
1328}
1329#[derive(Copy, Clone)]
1330#[repr(C)]
1331pub struct clusterLink {
1332    pub ctime: mstime_t,
1333    pub conn: *mut connection,
1334    pub sndbuf: sds,
1335    pub rcvbuf: *mut libc::c_char,
1336    pub rcvbuf_len: size_t,
1337    pub rcvbuf_alloc: size_t,
1338    pub node: *mut clusterNode,
1339    pub inbound: libc::c_int,
1340}
1341#[derive(Copy, Clone)]
1342#[repr(C)]
1343pub struct C2RustUnnamed_6 {
1344    pub last_sample_time: libc::c_longlong,
1345    pub last_sample_count: libc::c_longlong,
1346    pub samples: [libc::c_longlong; 16],
1347    pub idx: libc::c_int,
1348}
1349#[no_mangle]
1350pub unsafe extern "C" fn checkBlockedClientTimeout(
1351    mut c: *mut client,
1352    mut now: mstime_t,
1353) -> libc::c_int {
1354    if (*c).flags & ((1 as libc::c_int) << 4 as libc::c_int) as libc::c_ulong != 0
1355        && (*c).bpop.timeout != 0 as libc::c_int as libc::c_longlong
1356        && (*c).bpop.timeout < now
1357    {
1358        replyToBlockedClientTimedOut(c);
1359        unblockClient(c);
1360        return 1 as libc::c_int;
1361    } else {
1362        return 0 as libc::c_int
1363    };
1364}
1365#[no_mangle]
1366pub unsafe extern "C" fn clientsCronHandleTimeout(
1367    mut c: *mut client,
1368    mut now_ms: mstime_t,
1369) -> libc::c_int {
1370    let mut now: time_t = (now_ms / 1000 as libc::c_int as libc::c_longlong) as time_t;
1371    if server.maxidletime != 0
1372        && (*c).flags & ((1 as libc::c_int) << 0 as libc::c_int) as libc::c_ulong == 0
1373        && mustObeyClient(c) == 0
1374        && (*c).flags & ((1 as libc::c_int) << 4 as libc::c_int) as libc::c_ulong == 0
1375        && (*c).flags & ((1 as libc::c_int) << 18 as libc::c_int) as libc::c_ulong == 0
1376        && now - (*c).lastinteraction > server.maxidletime as libc::c_long
1377    {
1378        if !((1 as libc::c_int & 0xff as libc::c_int) < server.verbosity) {
1379            _serverLog(
1380                1 as libc::c_int,
1381                b"Closing idle client\0" as *const u8 as *const libc::c_char,
1382            );
1383        }
1384        freeClient(c);
1385        return 1 as libc::c_int;
1386    } else {
1387        if (*c).flags & ((1 as libc::c_int) << 4 as libc::c_int) as libc::c_ulong != 0 {
1388            if server.cluster_enabled != 0 {
1389                if clusterRedirectBlockedClientIfNeeded(c) != 0 {
1390                    unblockClient(c);
1391                }
1392            }
1393        }
1394    }
1395    return 0 as libc::c_int;
1396}
1397#[no_mangle]
1398pub unsafe extern "C" fn encodeTimeoutKey(
1399    mut buf: *mut libc::c_uchar,
1400    mut timeout: uint64_t,
1401    mut c: *mut client,
1402) {
1403    timeout = intrev64(timeout);
1404    memcpy(
1405        buf as *mut libc::c_void,
1406        &mut timeout as *mut uint64_t as *const libc::c_void,
1407        core::mem::size_of::<uint64_t>() as libc::c_ulong,
1408    );
1409    memcpy(
1410        buf.offset(8 as libc::c_int as isize) as *mut libc::c_void,
1411        &mut c as *mut *mut client as *const libc::c_void,
1412        core::mem::size_of::<*mut client>() as libc::c_ulong,
1413    );
1414    if core::mem::size_of::<*mut client>() as libc::c_ulong
1415        == 4 as libc::c_int as libc::c_ulong
1416    {
1417        memset(
1418            buf.offset(12 as libc::c_int as isize) as *mut libc::c_void,
1419            0 as libc::c_int,
1420            4 as libc::c_int as libc::c_ulong,
1421        );
1422    }
1423}
1424#[no_mangle]
1425pub unsafe extern "C" fn decodeTimeoutKey(
1426    mut buf: *mut libc::c_uchar,
1427    mut toptr: *mut uint64_t,
1428    mut cptr: *mut *mut client,
1429) {
1430    memcpy(
1431        toptr as *mut libc::c_void,
1432        buf as *const libc::c_void,
1433        core::mem::size_of::<uint64_t>() as libc::c_ulong,
1434    );
1435    *toptr = intrev64(*toptr);
1436    memcpy(
1437        cptr as *mut libc::c_void,
1438        buf.offset(8 as libc::c_int as isize) as *const libc::c_void,
1439        core::mem::size_of::<*mut client>() as libc::c_ulong,
1440    );
1441}
1442#[no_mangle]
1443pub unsafe extern "C" fn addClientToTimeoutTable(mut c: *mut client) {
1444    if (*c).bpop.timeout == 0 as libc::c_int as libc::c_longlong {
1445        return;
1446    }
1447    let mut timeout: uint64_t = (*c).bpop.timeout as uint64_t;
1448    let mut buf: [libc::c_uchar; 16] = [0; 16];
1449    encodeTimeoutKey(buf.as_mut_ptr(), timeout, c);
1450    if raxTryInsert(
1451        server.clients_timeout_table,
1452        buf.as_mut_ptr(),
1453        core::mem::size_of::<[libc::c_uchar; 16]>() as libc::c_ulong,
1454        0 as *mut libc::c_void,
1455        0 as *mut *mut libc::c_void,
1456    ) != 0
1457    {
1458        (*c)
1459            .flags = ((*c).flags as libc::c_ulonglong
1460            | (1 as libc::c_ulonglong) << 38 as libc::c_int) as uint64_t;
1461    }
1462}
1463#[no_mangle]
1464pub unsafe extern "C" fn removeClientFromTimeoutTable(mut c: *mut client) {
1465    if (*c).flags as libc::c_ulonglong & (1 as libc::c_ulonglong) << 38 as libc::c_int
1466        == 0
1467    {
1468        return;
1469    }
1470    (*c)
1471        .flags = ((*c).flags as libc::c_ulonglong
1472        & !((1 as libc::c_ulonglong) << 38 as libc::c_int)) as uint64_t;
1473    let mut timeout: uint64_t = (*c).bpop.timeout as uint64_t;
1474    let mut buf: [libc::c_uchar; 16] = [0; 16];
1475    encodeTimeoutKey(buf.as_mut_ptr(), timeout, c);
1476    raxRemove(
1477        server.clients_timeout_table,
1478        buf.as_mut_ptr(),
1479        core::mem::size_of::<[libc::c_uchar; 16]>() as libc::c_ulong,
1480        0 as *mut *mut libc::c_void,
1481    );
1482}
1483#[no_mangle]
1484pub unsafe extern "C" fn handleBlockedClientsTimeout() {
1485    if raxSize(server.clients_timeout_table) == 0 as libc::c_int as libc::c_ulong {
1486        return;
1487    }
1488    let mut now: uint64_t = mstime() as uint64_t;
1489    let mut ri: raxIterator = raxIterator {
1490        flags: 0,
1491        rt: 0 as *mut rax,
1492        key: 0 as *mut libc::c_uchar,
1493        data: 0 as *mut libc::c_void,
1494        key_len: 0,
1495        key_max: 0,
1496        key_static_string: [0; 128],
1497        node: 0 as *mut raxNode,
1498        stack: raxStack {
1499            stack: 0 as *mut *mut libc::c_void,
1500            items: 0,
1501            maxitems: 0,
1502            static_items: [0 as *mut libc::c_void; 32],
1503            oom: 0,
1504        },
1505        node_cb: None,
1506    };
1507    raxStart(&mut ri, server.clients_timeout_table);
1508    raxSeek(
1509        &mut ri,
1510        b"^\0" as *const u8 as *const libc::c_char,
1511        0 as *mut libc::c_uchar,
1512        0 as libc::c_int as size_t,
1513    );
1514    while raxNext(&mut ri) != 0 {
1515        let mut timeout: uint64_t = 0;
1516        let mut c: *mut client = 0 as *mut client;
1517        decodeTimeoutKey(ri.key, &mut timeout, &mut c);
1518        if timeout >= now {
1519            break;
1520        }
1521        (*c)
1522            .flags = ((*c).flags as libc::c_ulonglong
1523            & !((1 as libc::c_ulonglong) << 38 as libc::c_int)) as uint64_t;
1524        checkBlockedClientTimeout(c, now as mstime_t);
1525        raxRemove(
1526            server.clients_timeout_table,
1527            ri.key,
1528            ri.key_len,
1529            0 as *mut *mut libc::c_void,
1530        );
1531        raxSeek(
1532            &mut ri,
1533            b"^\0" as *const u8 as *const libc::c_char,
1534            0 as *mut libc::c_uchar,
1535            0 as libc::c_int as size_t,
1536        );
1537    }
1538    raxStop(&mut ri);
1539}
1540#[no_mangle]
1541pub unsafe extern "C" fn getTimeoutFromObjectOrReply(
1542    mut c: *mut client,
1543    mut object: *mut robj,
1544    mut timeout: *mut mstime_t,
1545    mut unit: libc::c_int,
1546) -> libc::c_int {
1547    let mut tval: libc::c_longlong = 0;
1548    let mut ftval: f64 = 0 as f64;
1549    if unit == 0 as libc::c_int {
1550        if getLongDoubleFromObjectOrReply(
1551            c,
1552            object,
1553            &mut ftval,
1554            b"timeout is not a float or out of range\0" as *const u8
1555                as *const libc::c_char,
1556        ) != 0 as libc::c_int
1557        {
1558            return -(1 as libc::c_int);
1559        }
1560        tval = ((ceill(ftval * (1000.0 as f64))) as i64);
1561    } else if getLongLongFromObjectOrReply(
1562        c,
1563        object,
1564        &mut tval,
1565        b"timeout is not an integer or out of range\0" as *const u8
1566            as *const libc::c_char,
1567    ) != 0 as libc::c_int
1568    {
1569        return -(1 as libc::c_int)
1570    }
1571    if tval < 0 as libc::c_int as libc::c_longlong {
1572        addReplyError(c, b"timeout is negative\0" as *const u8 as *const libc::c_char);
1573        return -(1 as libc::c_int);
1574    }
1575    if tval > 0 as libc::c_int as libc::c_longlong {
1576        tval += mstime();
1577    }
1578    *timeout = tval;
1579    return 0 as libc::c_int;
1580}