This file is indexed.

/usr/share/doc/sbcl/sbcl-internals/Implementation-warts.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
<!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>Implementation warts (SBCL Internals)</title>

<meta name="description" content="Implementation warts (SBCL Internals)">
<meta name="keywords" content="Implementation warts (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="Programming-with-signal-handling-in-mind.html#Programming-with-signal-handling-in-mind" rel="next" title="Programming with signal handling in mind">
<link href="The-deferral-mechanism.html#The-deferral-mechanism" rel="prev" title="The deferral mechanism">
<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="Implementation-warts"></a>
<div class="header">
<p>
Next: <a href="Programming-with-signal-handling-in-mind.html#Programming-with-signal-handling-in-mind" accesskey="n" rel="next">Programming with signal handling in mind</a>, Previous: <a href="The-deferral-mechanism.html#The-deferral-mechanism" accesskey="p" rel="prev">The deferral mechanism</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="Implementation-warts-1"></a>
<h3 class="section">7.3 Implementation warts</h3>

<a name="Miscellaneous-issues"></a>
<h4 class="subsection">7.3.1 Miscellaneous issues</h4>

<p>Signal handlers automatically restore errno and fp state, but
arrange_return_to_lisp_function does not restore errno.
</p>
<a name="POSIX-_002d_002d-Letter-and-Spirit"></a>
<h4 class="subsection">7.3.2 POSIX &ndash; Letter and Spirit</h4>

<p>POSIX restricts signal handlers to a use only a narrow subset of POSIX
functions, and declares anything else to have undefined semantics.
</p>
<p>Apparently the real reason is that a signal handler is potentially
interrupting a POSIX call: so the signal safety requirement is really
a re-entrancy requirement. We can work around the letter of the
standard by arranging to handle the interrupt when the signal handler
returns (see: <code>arrange_return_to_lisp_function</code>.) This does,
however, in no way protect us from the real issue of re-entrancy: even
though we would no longer be in a signal handler, we might still be in
the middle of an interrupted POSIX call.
</p>
<p>For some signals this appears to be a non-issue: <code>SIGSEGV</code> and
other synchronous signals are raised by our code for our code, and so
we can be sure that we are not interrupting a POSIX call with any of
them.
</p>
<p>For asynchronous signals like <code>SIGALARM</code> and <code>SIGINT</code> this
is a real issue.
</p>
<p>The right thing to do in multithreaded builds would probably be to use
POSIX semaphores (which are signal safe) to inform a separate handler
thread about such asynchronous events. In single-threaded builds there
does not seem to be any other option aside from generally blocking
asynch signals and listening for them every once and a while at safe
points. Neither of these is implemented as of SBCL 1.0.4.
</p>
<p>Currently all our handlers invoke unsafe functions without hesitation.
</p>
<hr>
<div class="header">
<p>
Next: <a href="Programming-with-signal-handling-in-mind.html#Programming-with-signal-handling-in-mind" accesskey="n" rel="next">Programming with signal handling in mind</a>, Previous: <a href="The-deferral-mechanism.html#The-deferral-mechanism" accesskey="p" rel="prev">The deferral mechanism</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>