blob: 870d07daf63eee3c2c4f9865a8f38d2d27946804 [file] [log] [blame]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.18"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Crashpad: crashpad::Signals Class Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="crashpad_doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Crashpad
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.18 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="namespacecrashpad.html">crashpad</a></li><li class="navelem"><a class="el" href="classcrashpad_1_1Signals.html">Signals</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="summary">
<a href="#nested-classes">Classes</a> &#124;
<a href="#pub-types">Public Types</a> &#124;
<a href="#pub-static-methods">Static Public Member Functions</a> &#124;
<a href="#pub-static-attribs">Static Public Attributes</a> &#124;
<a href="classcrashpad_1_1Signals-members.html">List of all members</a> </div>
<div class="headertitle">
<div class="title">crashpad::Signals Class Reference</div> </div>
</div><!--header-->
<div class="contents">
<p>Utilities for handling POSIX signals.
<a href="classcrashpad_1_1Signals.html#details">More...</a></p>
<p><code>#include &quot;util/posix/signals.h&quot;</code></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
Classes</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcrashpad_1_1Signals_1_1OldActions.html">OldActions</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A group of <code>struct sigaction</code> structures corresponding to a set of signals’&#160;previous actions, addressable by signal number. <a href="classcrashpad_1_1Signals_1_1OldActions.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
Public Types</h2></td></tr>
<tr class="memitem:a0e1accccdf6e8c68f746b8a56b52785b"><td class="memItemLeft" align="right" valign="top"><a id="a0e1accccdf6e8c68f746b8a56b52785b"></a>
using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcrashpad_1_1Signals.html#a0e1accccdf6e8c68f746b8a56b52785b">Handler</a> = void(*)(int, siginfo_t *, void *)</td></tr>
<tr class="memdesc:a0e1accccdf6e8c68f746b8a56b52785b"><td class="mdescLeft">&#160;</td><td class="mdescRight">The type used for <code>struct sigaction::sa_sigaction</code>. <br /></td></tr>
<tr class="separator:a0e1accccdf6e8c68f746b8a56b52785b"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>
Static Public Member Functions</h2></td></tr>
<tr class="memitem:a7d0ddf78702d8272d45446f4d6d23811"><td class="memItemLeft" align="right" valign="top">static bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcrashpad_1_1Signals.html#a7d0ddf78702d8272d45446f4d6d23811">InstallHandler</a> (int sig, <a class="el" href="classcrashpad_1_1Signals.html#a0e1accccdf6e8c68f746b8a56b52785b">Handler</a> handler, int flags, struct sigaction *old_action)</td></tr>
<tr class="memdesc:a7d0ddf78702d8272d45446f4d6d23811"><td class="mdescLeft">&#160;</td><td class="mdescRight">Installs a new signal handler. <a href="classcrashpad_1_1Signals.html#a7d0ddf78702d8272d45446f4d6d23811">More...</a><br /></td></tr>
<tr class="separator:a7d0ddf78702d8272d45446f4d6d23811"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a46c25d43264336b48afa913a29aef45b"><td class="memItemLeft" align="right" valign="top">static bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcrashpad_1_1Signals.html#a46c25d43264336b48afa913a29aef45b">InstallDefaultHandler</a> (int sig)</td></tr>
<tr class="memdesc:a46c25d43264336b48afa913a29aef45b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Installs <code>SIG_DFL</code> for the signal <em>sig</em>. <a href="classcrashpad_1_1Signals.html#a46c25d43264336b48afa913a29aef45b">More...</a><br /></td></tr>
<tr class="separator:a46c25d43264336b48afa913a29aef45b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2915876d6786521e6616049fe2a5f055"><td class="memItemLeft" align="right" valign="top">static bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcrashpad_1_1Signals.html#a2915876d6786521e6616049fe2a5f055">InstallCrashHandlers</a> (<a class="el" href="classcrashpad_1_1Signals.html#a0e1accccdf6e8c68f746b8a56b52785b">Handler</a> handler, int flags, <a class="el" href="classcrashpad_1_1Signals_1_1OldActions.html">OldActions</a> *old_actions, const std::set&lt; int &gt; *unhandled_signals=nullptr)</td></tr>
<tr class="memdesc:a2915876d6786521e6616049fe2a5f055"><td class="mdescLeft">&#160;</td><td class="mdescRight">Installs a new signal handler for all signals associated with crashes. <a href="classcrashpad_1_1Signals.html#a2915876d6786521e6616049fe2a5f055">More...</a><br /></td></tr>
<tr class="separator:a2915876d6786521e6616049fe2a5f055"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af5ae38c6eac880fa377e2ef6e871aa9b"><td class="memItemLeft" align="right" valign="top">static bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcrashpad_1_1Signals.html#af5ae38c6eac880fa377e2ef6e871aa9b">InstallTerminateHandlers</a> (<a class="el" href="classcrashpad_1_1Signals.html#a0e1accccdf6e8c68f746b8a56b52785b">Handler</a> handler, int flags, <a class="el" href="classcrashpad_1_1Signals_1_1OldActions.html">OldActions</a> *old_actions)</td></tr>
<tr class="memdesc:af5ae38c6eac880fa377e2ef6e871aa9b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Installs a new signal handler for all signals associated with termination. <a href="classcrashpad_1_1Signals.html#af5ae38c6eac880fa377e2ef6e871aa9b">More...</a><br /></td></tr>
<tr class="separator:af5ae38c6eac880fa377e2ef6e871aa9b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8b8de5e2464d8b4cbd9edc3729fe5aae"><td class="memItemLeft" align="right" valign="top">static bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcrashpad_1_1Signals.html#a8b8de5e2464d8b4cbd9edc3729fe5aae">WillSignalReraiseAutonomously</a> (const siginfo_t *siginfo)</td></tr>
<tr class="memdesc:a8b8de5e2464d8b4cbd9edc3729fe5aae"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determines whether a signal will be re-raised autonomously upon return from a signal handler. <a href="classcrashpad_1_1Signals.html#a8b8de5e2464d8b4cbd9edc3729fe5aae">More...</a><br /></td></tr>
<tr class="separator:a8b8de5e2464d8b4cbd9edc3729fe5aae"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae401753011dca60d8b9417a28c0d7ff1"><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcrashpad_1_1Signals.html#ae401753011dca60d8b9417a28c0d7ff1">RestoreHandlerAndReraiseSignalOnReturn</a> (const siginfo_t *siginfo, const struct sigaction *old_action)</td></tr>
<tr class="memdesc:ae401753011dca60d8b9417a28c0d7ff1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Restores a previous signal action and arranges to re-raise a signal on return from a signal handler. <a href="classcrashpad_1_1Signals.html#ae401753011dca60d8b9417a28c0d7ff1">More...</a><br /></td></tr>
<tr class="separator:ae401753011dca60d8b9417a28c0d7ff1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6dbaf303bbbcd8e3056232e5942da16e"><td class="memItemLeft" align="right" valign="top">static bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcrashpad_1_1Signals.html#a6dbaf303bbbcd8e3056232e5942da16e">IsCrashSignal</a> (int sig)</td></tr>
<tr class="memdesc:a6dbaf303bbbcd8e3056232e5942da16e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determines whether a signal is associated with a crash. <a href="classcrashpad_1_1Signals.html#a6dbaf303bbbcd8e3056232e5942da16e">More...</a><br /></td></tr>
<tr class="separator:a6dbaf303bbbcd8e3056232e5942da16e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a41ddeba5c2df63c4e632133e5370d7e7"><td class="memItemLeft" align="right" valign="top">static bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcrashpad_1_1Signals.html#a41ddeba5c2df63c4e632133e5370d7e7">IsTerminateSignal</a> (int sig)</td></tr>
<tr class="memdesc:a41ddeba5c2df63c4e632133e5370d7e7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determines whether a signal is associated with termination. <a href="classcrashpad_1_1Signals.html#a41ddeba5c2df63c4e632133e5370d7e7">More...</a><br /></td></tr>
<tr class="separator:a41ddeba5c2df63c4e632133e5370d7e7"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-attribs"></a>
Static Public Attributes</h2></td></tr>
<tr class="memitem:a04e054616ab6c9f179c50c3ccd35881b"><td class="memItemLeft" align="right" valign="top"><a id="a04e054616ab6c9f179c50c3ccd35881b"></a>
static constexpr int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcrashpad_1_1Signals.html#a04e054616ab6c9f179c50c3ccd35881b">kSimulatedSigno</a> = -1</td></tr>
<tr class="memdesc:a04e054616ab6c9f179c50c3ccd35881b"><td class="mdescLeft">&#160;</td><td class="mdescRight">A signal number used by Crashpad to simulate signals. <br /></td></tr>
<tr class="separator:a04e054616ab6c9f179c50c3ccd35881b"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Utilities for handling POSIX signals. </p>
</div><h2 class="groupheader">Member Function Documentation</h2>
<a id="a2915876d6786521e6616049fe2a5f055"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2915876d6786521e6616049fe2a5f055">&#9670;&nbsp;</a></span>InstallCrashHandlers()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">bool crashpad::Signals::InstallCrashHandlers </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classcrashpad_1_1Signals.html#a0e1accccdf6e8c68f746b8a56b52785b">Handler</a>&#160;</td>
<td class="paramname"><em>handler</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>flags</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classcrashpad_1_1Signals_1_1OldActions.html">OldActions</a> *&#160;</td>
<td class="paramname"><em>old_actions</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::set&lt; int &gt; *&#160;</td>
<td class="paramname"><em>unhandled_signals</em> = <code>nullptr</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Installs a new signal handler for all signals associated with crashes. </p>
<p><a class="el" href="classcrashpad_1_1Signals.html" title="Utilities for handling POSIX signals.">Signals</a> associated with crashes are those whose default dispositions involve creating a core dump. The precise set of signals involved varies between operating systems.</p>
<p>A single signal may either be associated with a crash or with termination (see <a class="el" href="classcrashpad_1_1Signals.html#af5ae38c6eac880fa377e2ef6e871aa9b" title="Installs a new signal handler for all signals associated with termination.">InstallTerminateHandlers()</a>), and perhaps neither, but never both.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[in]</td><td class="paramname">handler</td><td>A signal-handling function to execute, used as the <code>struct sigaction::sa_sigaction</code> field when calling <code>sigaction()</code>. </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">flags</td><td>Flags to pass to <code>sigaction()</code> in the <code>struct sigaction::sa_flags</code> field. <code>SA_SIGINFO</code> will be specified implicitly. </td></tr>
<tr><td class="paramdir">[out]</td><td class="paramname">old_actions</td><td>The previous actions for the signals, replaced by the new action. May be <code>nullptr</code> if not needed. The same <em>old_actions</em> object may be used for calls to both this function and <a class="el" href="classcrashpad_1_1Signals.html#af5ae38c6eac880fa377e2ef6e871aa9b" title="Installs a new signal handler for all signals associated with termination.">InstallTerminateHandlers()</a>. </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">unhandled_signals</td><td>Signal handlers will not be installed for signal numbers in this set. Optional.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><code>true</code> on success. <code>false</code> on failure with a message logged.</dd></dl>
<dl class="section warning"><dt>Warning</dt><dd>This function may not be called from a signal handler because of its use of logging. See <a class="el" href="classcrashpad_1_1Signals.html#ae401753011dca60d8b9417a28c0d7ff1" title="Restores a previous signal action and arranges to re-raise a signal on return from a signal handler.">RestoreHandlerAndReraiseSignalOnReturn()</a> instead. </dd></dl>
</div>
</div>
<a id="a46c25d43264336b48afa913a29aef45b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a46c25d43264336b48afa913a29aef45b">&#9670;&nbsp;</a></span>InstallDefaultHandler()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">bool crashpad::Signals::InstallDefaultHandler </td>
<td>(</td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>sig</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Installs <code>SIG_DFL</code> for the signal <em>sig</em>. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[in]</td><td class="paramname">sig</td><td>The signal to set the default action for.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><code>true</code> on success, <code>false</code> on failure with errno set. No message is logged. </dd></dl>
</div>
</div>
<a id="a7d0ddf78702d8272d45446f4d6d23811"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7d0ddf78702d8272d45446f4d6d23811">&#9670;&nbsp;</a></span>InstallHandler()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">bool crashpad::Signals::InstallHandler </td>
<td>(</td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>sig</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classcrashpad_1_1Signals.html#a0e1accccdf6e8c68f746b8a56b52785b">Handler</a>&#160;</td>
<td class="paramname"><em>handler</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>flags</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">struct sigaction *&#160;</td>
<td class="paramname"><em>old_action</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Installs a new signal handler. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[in]</td><td class="paramname">sig</td><td>The signal number to handle. </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">handler</td><td>A signal-handling function to execute, used as the <code>struct sigaction::sa_sigaction</code> field when calling <code>sigaction()</code>. </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">flags</td><td>Flags to pass to <code>sigaction()</code> in the <code>struct sigaction::sa_flags</code> field. <code>SA_SIGINFO</code> will be specified implicitly. </td></tr>
<tr><td class="paramdir">[out]</td><td class="paramname">old_action</td><td>The previous action for the signal, replaced by the new action. May be <code>nullptr</code> if not needed.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><code>true</code> on success. <code>false</code> on failure with a message logged.</dd></dl>
<dl class="section warning"><dt>Warning</dt><dd>This function may not be called from a signal handler because of its use of logging. See <a class="el" href="classcrashpad_1_1Signals.html#ae401753011dca60d8b9417a28c0d7ff1" title="Restores a previous signal action and arranges to re-raise a signal on return from a signal handler.">RestoreHandlerAndReraiseSignalOnReturn()</a> instead. </dd></dl>
</div>
</div>
<a id="af5ae38c6eac880fa377e2ef6e871aa9b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af5ae38c6eac880fa377e2ef6e871aa9b">&#9670;&nbsp;</a></span>InstallTerminateHandlers()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">bool crashpad::Signals::InstallTerminateHandlers </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classcrashpad_1_1Signals.html#a0e1accccdf6e8c68f746b8a56b52785b">Handler</a>&#160;</td>
<td class="paramname"><em>handler</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>flags</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classcrashpad_1_1Signals_1_1OldActions.html">OldActions</a> *&#160;</td>
<td class="paramname"><em>old_actions</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Installs a new signal handler for all signals associated with termination. </p>
<p><a class="el" href="classcrashpad_1_1Signals.html" title="Utilities for handling POSIX signals.">Signals</a> associated with termination are those whose default dispositions involve terminating the process without creating a core dump. The precise set of signals involved varies between operating systems.</p>
<p>A single signal may either be associated with termination or with a crash (see InstalCrashHandlers()), and perhaps neither, but never both.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[in]</td><td class="paramname">handler</td><td>A signal-handling function to execute, used as the <code>struct sigaction::sa_sigaction</code> field when calling <code>sigaction()</code>. </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">flags</td><td>Flags to pass to <code>sigaction()</code> in the <code>struct sigaction::sa_flags</code> field. <code>SA_SIGINFO</code> will be specified implicitly. </td></tr>
<tr><td class="paramdir">[out]</td><td class="paramname">old_actions</td><td>The previous actions for the signals, replaced by the new action. May be <code>nullptr</code> if not needed. The same <em>old_actions</em> object may be used for calls to both this function and <a class="el" href="classcrashpad_1_1Signals.html#a2915876d6786521e6616049fe2a5f055" title="Installs a new signal handler for all signals associated with crashes.">InstallCrashHandlers()</a>.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><code>true</code> on success. <code>false</code> on failure with a message logged.</dd></dl>
<dl class="section warning"><dt>Warning</dt><dd>This function may not be called from a signal handler because of its use of logging. See <a class="el" href="classcrashpad_1_1Signals.html#ae401753011dca60d8b9417a28c0d7ff1" title="Restores a previous signal action and arranges to re-raise a signal on return from a signal handler.">RestoreHandlerAndReraiseSignalOnReturn()</a> instead. </dd></dl>
</div>
</div>
<a id="a6dbaf303bbbcd8e3056232e5942da16e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6dbaf303bbbcd8e3056232e5942da16e">&#9670;&nbsp;</a></span>IsCrashSignal()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">bool crashpad::Signals::IsCrashSignal </td>
<td>(</td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>sig</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Determines whether a signal is associated with a crash. </p>
<p><a class="el" href="classcrashpad_1_1Signals.html" title="Utilities for handling POSIX signals.">Signals</a> associated with crashes are those whose default dispositions involve creating a core dump. The precise set of signals involved varies between operating systems.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[in]</td><td class="paramname">sig</td><td>The signal to test.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><code>true</code> if <em>sig</em> is associated with a crash. <code>false</code> otherwise.</dd></dl>
<dl class="section note"><dt>Note</dt><dd>This function is safe to call from a signal handler. </dd></dl>
</div>
</div>
<a id="a41ddeba5c2df63c4e632133e5370d7e7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a41ddeba5c2df63c4e632133e5370d7e7">&#9670;&nbsp;</a></span>IsTerminateSignal()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">bool crashpad::Signals::IsTerminateSignal </td>
<td>(</td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>sig</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Determines whether a signal is associated with termination. </p>
<p><a class="el" href="classcrashpad_1_1Signals.html" title="Utilities for handling POSIX signals.">Signals</a> associated with termination are those whose default dispositions involve terminating the process without creating a core dump. The precise set of signals involved varies between operating systems.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[in]</td><td class="paramname">sig</td><td>The signal to test.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><code>true</code> if <em>sig</em> is associated with termination. <code>false</code> otherwise.</dd></dl>
<dl class="section note"><dt>Note</dt><dd>This function is safe to call from a signal handler. </dd></dl>
</div>
</div>
<a id="ae401753011dca60d8b9417a28c0d7ff1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae401753011dca60d8b9417a28c0d7ff1">&#9670;&nbsp;</a></span>RestoreHandlerAndReraiseSignalOnReturn()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void crashpad::Signals::RestoreHandlerAndReraiseSignalOnReturn </td>
<td>(</td>
<td class="paramtype">const siginfo_t *&#160;</td>
<td class="paramname"><em>siginfo</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const struct sigaction *&#160;</td>
<td class="paramname"><em>old_action</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Restores a previous signal action and arranges to re-raise a signal on return from a signal handler. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[in]</td><td class="paramname">siginfo</td><td>A pointer to a <code>siginfo_t</code> object received by a signal handler. </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">old_action</td><td>The previous action for the signal, which will be re-established as the signal’s action. May be <code>nullptr</code>, which directs the default action for the signal to be used.</td></tr>
</table>
</dd>
</dl>
<p>If this function fails, it will immediately call <code>_exit()</code> and set an exit status of <code>191</code>.</p>
<dl class="section note"><dt>Note</dt><dd>This function may only be called from a signal handler. </dd></dl>
</div>
</div>
<a id="a8b8de5e2464d8b4cbd9edc3729fe5aae"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8b8de5e2464d8b4cbd9edc3729fe5aae">&#9670;&nbsp;</a></span>WillSignalReraiseAutonomously()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">bool crashpad::Signals::WillSignalReraiseAutonomously </td>
<td>(</td>
<td class="paramtype">const siginfo_t *&#160;</td>
<td class="paramname"><em>siginfo</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Determines whether a signal will be re-raised autonomously upon return from a signal handler. </p>
<p>Certain signals, when generated synchronously in response to a hardware fault, are unrecoverable. Upon return from the signal handler, the same action that triggered the signal to be raised initially will be retried, and unless the signal handler took action to mitigate this error, the same signal will be re-raised. As an example, a CPU will not be able to read unmapped memory (causing <code>SIGSEGV</code>), thus the signal will be re-raised upon return from the signal handler unless the signal handler established a memory mapping where required.</p>
<p>It is important to distinguish between these synchronous signals generated in response to a hardware fault and signals generated asynchronously or in software. As an example, <code>SIGSEGV</code> will not re-raise autonomously if sent by <code>kill()</code>.</p>
<p>This function distinguishes between signals that can re-raise autonomously, and for those that can, between instances of the signal that were generated synchronously in response to a hardware fault and instances that were generated by other means.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[in]</td><td class="paramname">siginfo</td><td>A pointer to a <code>siginfo_t</code> object received by a signal handler.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><code>true</code> if the signal being handled will re-raise itself autonomously upon return from a signal handler. <code>false</code> if it will not. When this function returns <code>false</code>, a signal can still be re-raised upon return from a signal handler by calling <code>raise()</code> from within the signal handler.</dd></dl>
<dl class="section note"><dt>Note</dt><dd>This function is safe to call from a signal handler. </dd></dl>
</div>
</div>
<hr/>The documentation for this class was generated from the following files:<ul>
<li>util/posix/signals.h</li>
<li>util/posix/signals.cc</li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.18
</small></address>
</body>
</html>