PostgreSQL Source Code: src/backend/utils/misc/timeout.c Source File (original) (raw)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
16
18
23
24
25
41
42
43
44
47
48
49
50
51
54
55
56
57
58
59
60
61
62
63
64
65
66
68
69#define disable_alarm() (alarm_enabled = false)
70#define enable_alarm() (alarm_enabled = true)
71
72
73
74
75
76
77
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95static int
97{
98 int i;
99
101 {
103 return i;
104 }
105
106 return -1;
107}
108
109
110
111
112
113static void
115{
116 int i;
117
119 elog(FATAL, "timeout index %d out of range 0..%d", index,
121
124
127
129
131}
132
133
134
135
136static void
138{
139 int i;
140
142 elog(FATAL, "timeout index %d out of range 0..%d", index,
144
147
150
152}
153
154
155
156
157static void
159 int interval_in_ms)
160{
161 int i;
162
163
166
167
168
169
170
173
174
175
176
177
179 {
181
183 break;
185 break;
186 }
187
188
189
190
195
197}
198
199
200
201
202
203
204
205
206
207
208
209static void
211{
213 {
218
220
221
222
223
224
225
226
227
228
229
232
233
234
235
236
237
238
241 {
243
246 }
247 else
248 {
251
252
253
254
255
258 }
259
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
317 return;
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
337
338
340 {
341
342
343
344
345
347 elog(FATAL, "could not enable SIGALRM timer: %m");
348 }
349 }
350}
351
352
353
354
355
356
357
358
359
360
361
362
363static void
365{
366
367
368
369
370
372
373
374
375
376
378
379
380
381
382
384
385
386
387
389 {
390
391
392
393
394
396
398 {
400
401
404 {
406
407
409
410
412
413
415
416
418 {
420
421
422
423
424
425
426
427
437 }
438
439
440
441
442
443
445 }
446
447
449 }
450 }
451
453}
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469void
471{
472 int i;
473
474
476
478
480 {
488 }
489
491
492
494}
495
496
497
498
499
500
501
502
503
506{
508
509
510
512 {
513
516 break;
520 errmsg("cannot add more timeout reasons")));
521 }
522
524
526
527 return id;
528}
529
530
531
532
533
534
535
536
537
538
539void
541{
542
544 return;
545
546
548
549
552}
553
554
555
556
557
558
559void
561{
564
565
567
568
572
573
575}
576
577
578
579
580
581
582
583void
585{
587
588
590
591
594
595
597}
598
599
600
601
602
603
604
605
606void
608{
610
611
613
614
617
618
620}
621
622
623
624
625
626
627
628
629void
631{
633 int i;
634
635
637
638
640
641 for (i = 0; i < count; i++)
642 {
645
647 {
652 break;
653
656 break;
657
662 break;
663
664 default:
665 elog(ERROR, "unrecognized timeout type %d",
667 break;
668 }
669 }
670
671
673}
674
675
676
677
678
679
680
681
682
683
684void
686{
687
690
691
693
694
697
698
699 if (!keep_indicator)
701
702
705}
706
707
708
709
710
711
712
713
714
715
716
717void
719{
720 int i;
721
723
724
726
727
728 for (i = 0; i < count; i++)
729 {
731
733
736
739 }
740
741
744}
745
746
747
748
749
750void
752{
753 int i;
754
756
757
758
759
760
761
762
764
766 {
770 }
771}
772
773
774
775
776
777
778
779bool
784
785
786
787
788
789
790
791
792bool
794{
796 {
799 return true;
800 }
801 return false;
802}
803
804
805
806
807
808
809
810
811
817
818
819
820
821
822
823
824
825
void TimestampDifference(TimestampTz start_time, TimestampTz stop_time, long *secs, int *microsecs)
TimestampTz GetCurrentTimestamp(void)
Datum now(PG_FUNCTION_ARGS)
#define Assert(condition)
#define MemSet(start, val, len)
int errcode(int sqlerrcode)
#define ereport(elevel,...)
void SetLatch(Latch *latch)
#define RESUME_INTERRUPTS()
#define HOLD_INTERRUPTS()
timeout_handler_proc timeout_handler
static int find_active_timeout(TimeoutId id)
void enable_timeout_after(TimeoutId id, int delay_ms)
void reschedule_timeouts(void)
bool get_timeout_active(TimeoutId id)
void disable_all_timeouts(bool keep_indicators)
static timeout_params *volatile active_timeouts[MAX_TIMEOUTS]
static bool all_timeouts_initialized
TimestampTz get_timeout_finish_time(TimeoutId id)
void InitializeTimeouts(void)
static volatile TimestampTz signal_due_at
TimestampTz get_timeout_start_time(TimeoutId id)
void enable_timeout_every(TimeoutId id, TimestampTz fin_time, int delay_ms)
static void handle_sig_alarm(SIGNAL_ARGS)
static timeout_params all_timeouts[MAX_TIMEOUTS]
static volatile sig_atomic_t alarm_enabled
static void insert_timeout(TimeoutId id, int index)
static volatile sig_atomic_t signal_pending
void enable_timeout_at(TimeoutId id, TimestampTz fin_time)
static void enable_timeout(TimeoutId id, TimestampTz now, TimestampTz fin_time, int interval_in_ms)
void disable_timeout(TimeoutId id, bool keep_indicator)
static volatile int num_active_timeouts
void enable_timeouts(const EnableTimeoutParams *timeouts, int count)
TimeoutId RegisterTimeout(TimeoutId id, timeout_handler_proc handler)
static void schedule_alarm(TimestampTz now)
void disable_timeouts(const DisableTimeoutParams *timeouts, int count)
static void remove_timeout_index(int index)
bool get_timeout_indicator(TimeoutId id, bool reset_indicator)
void(* timeout_handler_proc)(void)
int setitimer(int which, const struct itimerval *value, struct itimerval *ovalue)
#define TimestampTzPlusMilliseconds(tz, ms)