This file is indexed.

/usr/share/doc/sbcl/sbcl-internals/The-deferral-mechanism.html is in sbcl-doc 2:1.4.5-1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<!-- This manual is part of the SBCL software system. See the
README file for more information.

This manual is in the public domain and is provided with absolutely no
warranty. See the COPYING and CREDITS files for more
information. -->
<!-- Created by GNU Texinfo 6.5, http://www.gnu.org/software/texinfo/ -->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>The deferral mechanism (SBCL Internals)</title>

<meta name="description" content="The deferral mechanism (SBCL Internals)">
<meta name="keywords" content="The deferral mechanism (SBCL Internals)">
<meta name="resource-type" content="document">
<meta name="distribution" content="global">
<meta name="Generator" content="makeinfo">
<link href="index.html#Top" rel="start" title="Top">
<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
<link href="Signal-handling.html#Signal-handling" rel="up" title="Signal handling">
<link href="Implementation-warts.html#Implementation-warts" rel="next" title="Implementation warts">
<link href="Groups-of-signals.html#Groups-of-signals" rel="prev" title="Groups of signals">
<style type="text/css">
<!--
a.summary-letter {text-decoration: none}
blockquote.indentedblock {margin-right: 0em}
blockquote.smallindentedblock {margin-right: 0em; font-size: smaller}
blockquote.smallquotation {font-size: smaller}
div.display {margin-left: 3.2em}
div.example {margin-left: 3.2em}
div.lisp {margin-left: 3.2em}
div.smalldisplay {margin-left: 3.2em}
div.smallexample {margin-left: 3.2em}
div.smalllisp {margin-left: 3.2em}
kbd {font-style: oblique}
pre.display {font-family: inherit}
pre.format {font-family: inherit}
pre.menu-comment {font-family: serif}
pre.menu-preformatted {font-family: serif}
pre.smalldisplay {font-family: inherit; font-size: smaller}
pre.smallexample {font-size: smaller}
pre.smallformat {font-family: inherit; font-size: smaller}
pre.smalllisp {font-size: smaller}
span.nolinebreak {white-space: nowrap}
span.roman {font-family: initial; font-weight: normal}
span.sansserif {font-family: sans-serif; font-weight: normal}
ul.no-bullet {list-style: none}
-->
</style>


</head>

<body lang="en">
<a name="The-deferral-mechanism"></a>
<div class="header">
<p>
Next: <a href="Implementation-warts.html#Implementation-warts" accesskey="n" rel="next">Implementation warts</a>, Previous: <a href="Groups-of-signals.html#Groups-of-signals" accesskey="p" rel="prev">Groups of signals</a>, Up: <a href="Signal-handling.html#Signal-handling" accesskey="u" rel="up">Signal handling</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
</div>
<hr>
<a name="The-deferral-mechanism-1"></a>
<h3 class="section">7.2 The deferral mechanism</h3>

<a name="Pseudo-atomic-sections"></a>
<h4 class="subsection">7.2.1 Pseudo atomic sections</h4>

<p>Some operations, such as allocation, consist of several steps and
temporarily break for instance gc invariants. Interrupting said
operations is therefore dangerous to one&rsquo;s health. Blocking the
signals for each allocation is out of question as the overhead of the
two <code>sigsetmask</code> system calls would be enormous. Instead, pseudo
atomic sections are implemented with a simple flag.
</p>
<p>When a deferrable signal is delivered to a thread within a pseudo
atomic section the pseudo-atomic-interrupted flag is set, the signal
and its context are stored, and all deferrable signals blocked. This
is to guarantee that there is at most one pending handler in
SBCL. While the signals are blocked, the responsibility of keeping
track of other pending signals lies with the OS.
</p>
<p>On leaving the pseudo atomic section, the pending handler is run and
the signals are unblocked.
</p>
<a name="WITHOUT_002dINTERRUPTS"></a>
<h4 class="subsection">7.2.2 <code>WITHOUT-INTERRUPTS</code></h4>

<p>Similar to pseudo atomic, <code>WITHOUT-INTERRUPTS</code> defers deferrable
signals in its thread until the end of its body, provided it is not
nested in another <code>WITHOUT-INTERRUPTS</code>.
</p>
<p>Not so frequently used as pseudo atomic, <code>WITHOUT-INTERRUPTS</code>
benefits less from the deferral mechanism.
</p>
<a name="Stop-the-world"></a>
<h4 class="subsection">7.2.3 Stop the world</h4>

<p>Something of a special case, a signal that is blockable but not
deferrable by <code>WITHOUT-INTERRUPTS</code> is <code>SIG_STOP_FOR_GC</code>. It
is deferred by pseudo atomic and <code>WITHOUT-GCING</code>.
</p>
<a name="When-are-signals-handled_003f"></a>
<h4 class="subsection">7.2.4 When are signals handled?</h4>

<p>At once or as soon as the mechanism that deferred them allows.
</p>
<p>First, if something is deferred by pseudo atomic then it is run at the
end of pseudo atomic without exceptions. Even when both a GC request
or a <code>SIG_STOP_FOR_GC</code> and a deferrable signal such as
SIG_INTERRUPT_THREAD interrupts the pseudo atomic section.
</p>
<p>Second, an interrupt deferred by WITHOUT-INTERRUPTS is run when the
interrupts are enabled again. GC cannot interfere.
</p>
<p>Third, if GC or <code>SIG_STOP_FOR_GC</code> is deferred by
<code>WITHOUT-GCING</code> then the GC or stopping for GC will happen when
GC is not inhibited anymore. Interrupts cannot delay a gc.
</p>
<hr>
<div class="header">
<p>
Next: <a href="Implementation-warts.html#Implementation-warts" accesskey="n" rel="next">Implementation warts</a>, Previous: <a href="Groups-of-signals.html#Groups-of-signals" accesskey="p" rel="prev">Groups of signals</a>, Up: <a href="Signal-handling.html#Signal-handling" accesskey="u" rel="up">Signal handling</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
</div>



</body>
</html>