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)