Fixed multithread sync issue and duplicate thread on termination.

This commit is contained in:
Brad Arant committed 2023-03-11 21:55:33 -08:00
1 parent b0118cfc56
commit cfa70c5863
72 files changed
+395 -427

No files matched your search

+29 -42
View File
@@ -97,56 +97,43 @@ $(function() {
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; </div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; </div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classcore_1_1EPoll.html#a301b46b71ac7ac61a687ff723fe269b3">isStopping</a>(); </div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; </div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; </div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classcore_1_1EPoll.html#a3d813c7bbf0da70ebc8e3cb6aeeacfb4">registerSocket</a>(<a class="code" href="classcore_1_1Socket.html">Socket</a> *socket); </div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; </div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; </div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classcore_1_1EPoll.html#a5ab5e82ab51e0952fc8fbcc128f52900">unregisterSocket</a>(<a class="code" href="classcore_1_1Socket.html">Socket</a> *socket); </div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; </div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; </div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="keywordtype">int</span> <a class="code" href="classcore_1_1EPoll.html#a1e52017e1deae15c1c87c6b6a099e1ed">getDescriptor</a>(); </div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; </div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; </div>
<div class="line"><a name="l00100"></a><span class="lineno"><a class="line" href="classcore_1_1EPoll.html#acfcef2513d94f7b9a191fed3dc744d90"> 100</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="classcore_1_1EPoll.html#acfcef2513d94f7b9a191fed3dc744d90">maxSockets</a>; </div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; </div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; </div>
<div class="line"><a name="l00106"></a><span class="lineno"><a class="line" href="classcore_1_1EPoll.html#a3238b150b5d0a57eb2e1b17daa236d3b"> 106</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classcore_1_1EPoll.html#a3238b150b5d0a57eb2e1b17daa236d3b">eventReceived</a>(<span class="keyword">struct</span> epoll_event event); </div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; </div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; </div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <span class="keywordtype">int</span> <a class="code" href="classcore_1_1EPoll.html#a22b5f1545aff3162040844be043abcce">processCommand</a>(coreutils::ZString &amp;request, <a class="code" href="classcore_1_1TCPSession.html">TCPSession</a> &amp;session) <span class="keyword">override</span>; </div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; </div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <span class="keywordtype">void</span> resetSocket(<a class="code" href="classcore_1_1Socket.html">Socket</a> *socket);</div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; </div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="keyword">private</span>:</div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; </div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="keywordtype">int</span> epfd;</div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <span class="keywordtype">int</span> numberOfThreads;</div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; std::vector&lt;Thread&gt; threads;</div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <span class="keyword">volatile</span> <span class="keywordtype">bool</span> terminateThreads;</div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <span class="keywordtype">void</span> enableSocket(<a class="code" href="classcore_1_1Socket.html">Socket</a> *socket);</div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <span class="keywordtype">void</span> disableSocket(<a class="code" href="classcore_1_1Socket.html">Socket</a> *socket);</div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; </div>
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; };</div>
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; </div>
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160;}</div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; </div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; </div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; </div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; </div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keywordtype">int</span> <a class="code" href="classcore_1_1EPoll.html#a1e52017e1deae15c1c87c6b6a099e1ed">getDescriptor</a>(); </div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; </div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; </div>
<div class="line"><a name="l00083"></a><span class="lineno"><a class="line" href="classcore_1_1EPoll.html#acfcef2513d94f7b9a191fed3dc744d90"> 83</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="classcore_1_1EPoll.html#acfcef2513d94f7b9a191fed3dc744d90">maxSockets</a>; </div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; </div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; </div>
<div class="line"><a name="l00089"></a><span class="lineno"><a class="line" href="classcore_1_1EPoll.html#a3238b150b5d0a57eb2e1b17daa236d3b"> 89</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classcore_1_1EPoll.html#a3238b150b5d0a57eb2e1b17daa236d3b">eventReceived</a>(<span class="keyword">struct</span> epoll_event event); </div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; </div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; </div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="keywordtype">int</span> <a class="code" href="classcore_1_1EPoll.html#a22b5f1545aff3162040844be043abcce">processCommand</a>(coreutils::ZString &amp;request, <a class="code" href="classcore_1_1TCPSession.html">TCPSession</a> &amp;session) <span class="keyword">override</span>; </div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; </div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <span class="keyword">private</span>:</div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; </div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="keywordtype">int</span> epfd;</div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="keywordtype">int</span> numberOfThreads;</div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; std::vector&lt;Thread&gt; threads;</div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <span class="keyword">volatile</span> <span class="keywordtype">bool</span> terminateThreads;</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; </div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; };</div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; </div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160;}</div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; </div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; </div>
<div class="ttc" id="aclasscore_1_1Command_html"><div class="ttname"><a href="classcore_1_1Command.html">core::Command</a></div><div class="ttdef"><b>Definition:</b> Command.h:22</div></div>
<div class="ttc" id="aclasscore_1_1EPoll_html"><div class="ttname"><a href="classcore_1_1EPoll.html">core::EPoll</a></div><div class="ttdef"><b>Definition:</b> EPoll.h:31</div></div>
<div class="ttc" id="aclasscore_1_1EPoll_html_a0c2865acd31d14fbf19dbc42cc084ddc"><div class="ttname"><a href="classcore_1_1EPoll.html#a0c2865acd31d14fbf19dbc42cc084ddc">core::EPoll::stop</a></div><div class="ttdeci">bool stop()</div><div class="ttdoc">Stop and shut down the BMAEPoll processing.</div><div class="ttdef"><b>Definition:</b> EPoll.cpp:46</div></div>
<div class="ttc" id="aclasscore_1_1EPoll_html_a1e52017e1deae15c1c87c6b6a099e1ed"><div class="ttname"><a href="classcore_1_1EPoll.html#a1e52017e1deae15c1c87c6b6a099e1ed">core::EPoll::getDescriptor</a></div><div class="ttdeci">int getDescriptor()</div><div class="ttdoc">Return the descriptor for the ePoll socket.</div><div class="ttdef"><b>Definition:</b> EPoll.cpp:80</div></div>
<div class="ttc" id="aclasscore_1_1EPoll_html_a22b5f1545aff3162040844be043abcce"><div class="ttname"><a href="classcore_1_1EPoll.html#a22b5f1545aff3162040844be043abcce">core::EPoll::processCommand</a></div><div class="ttdeci">int processCommand(coreutils::ZString &amp;request, TCPSession &amp;session) override</div><div class="ttdoc">Output the threads array to the console.</div><div class="ttdef"><b>Definition:</b> EPoll.cpp:84</div></div>
<div class="ttc" id="aclasscore_1_1EPoll_html_a1e52017e1deae15c1c87c6b6a099e1ed"><div class="ttname"><a href="classcore_1_1EPoll.html#a1e52017e1deae15c1c87c6b6a099e1ed">core::EPoll::getDescriptor</a></div><div class="ttdeci">int getDescriptor()</div><div class="ttdoc">Return the descriptor for the ePoll socket.</div><div class="ttdef"><b>Definition:</b> EPoll.cpp:70</div></div>
<div class="ttc" id="aclasscore_1_1EPoll_html_a22b5f1545aff3162040844be043abcce"><div class="ttname"><a href="classcore_1_1EPoll.html#a22b5f1545aff3162040844be043abcce">core::EPoll::processCommand</a></div><div class="ttdeci">int processCommand(coreutils::ZString &amp;request, TCPSession &amp;session) override</div><div class="ttdoc">Output the threads array to the console.</div><div class="ttdef"><b>Definition:</b> EPoll.cpp:74</div></div>
<div class="ttc" id="aclasscore_1_1EPoll_html_a2fd5cc4336b5f72990ecc0e7ea3d7641"><div class="ttname"><a href="classcore_1_1EPoll.html#a2fd5cc4336b5f72990ecc0e7ea3d7641">core::EPoll::EPoll</a></div><div class="ttdeci">EPoll()</div><div class="ttdef"><b>Definition:</b> EPoll.cpp:9</div></div>
<div class="ttc" id="aclasscore_1_1EPoll_html_a301b46b71ac7ac61a687ff723fe269b3"><div class="ttname"><a href="classcore_1_1EPoll.html#a301b46b71ac7ac61a687ff723fe269b3">core::EPoll::isStopping</a></div><div class="ttdeci">bool isStopping()</div><div class="ttdoc">Returns a true if the stop command has been requested.</div><div class="ttdef"><b>Definition:</b> EPoll.cpp:66</div></div>
<div class="ttc" id="aclasscore_1_1EPoll_html_a3238b150b5d0a57eb2e1b17daa236d3b"><div class="ttname"><a href="classcore_1_1EPoll.html#a3238b150b5d0a57eb2e1b17daa236d3b">core::EPoll::eventReceived</a></div><div class="ttdeci">void eventReceived(struct epoll_event event)</div><div class="ttdoc">Dispatch event to appropriate socket.</div></div>
<div class="ttc" id="aclasscore_1_1EPoll_html_a3d813c7bbf0da70ebc8e3cb6aeeacfb4"><div class="ttname"><a href="classcore_1_1EPoll.html#a3d813c7bbf0da70ebc8e3cb6aeeacfb4">core::EPoll::registerSocket</a></div><div class="ttdeci">bool registerSocket(Socket *socket)</div><div class="ttdoc">Register a BMASocket for monitoring by BMAEPoll.</div><div class="ttdef"><b>Definition:</b> EPoll.cpp:70</div></div>
<div class="ttc" id="aclasscore_1_1EPoll_html_a5ab5e82ab51e0952fc8fbcc128f52900"><div class="ttname"><a href="classcore_1_1EPoll.html#a5ab5e82ab51e0952fc8fbcc128f52900">core::EPoll::unregisterSocket</a></div><div class="ttdeci">bool unregisterSocket(Socket *socket)</div><div class="ttdoc">Unregister a BMASocket from monitoring by BMAEPoll.</div><div class="ttdef"><b>Definition:</b> EPoll.cpp:75</div></div>
<div class="ttc" id="aclasscore_1_1EPoll_html_a8e7a2496d684b745a6410f9bd3e88534"><div class="ttname"><a href="classcore_1_1EPoll.html#a8e7a2496d684b745a6410f9bd3e88534">core::EPoll::~EPoll</a></div><div class="ttdeci">~EPoll()</div><div class="ttdef"><b>Definition:</b> EPoll.cpp:18</div></div>
<div class="ttc" id="aclasscore_1_1EPoll_html_aaefe2caef75eb538af90cb34682d277b"><div class="ttname"><a href="classcore_1_1EPoll.html#aaefe2caef75eb538af90cb34682d277b">core::EPoll::start</a></div><div class="ttdeci">bool start(int numberOfThreads, int maxSockets)</div><div class="ttdoc">Start the BMAEPoll processing.</div><div class="ttdef"><b>Definition:</b> EPoll.cpp:20</div></div>
<div class="ttc" id="aclasscore_1_1EPoll_html_acfcef2513d94f7b9a191fed3dc744d90"><div class="ttname"><a href="classcore_1_1EPoll.html#acfcef2513d94f7b9a191fed3dc744d90">core::EPoll::maxSockets</a></div><div class="ttdeci">int maxSockets</div><div class="ttdoc">The maximum number of socket allowed.</div><div class="ttdef"><b>Definition:</b> EPoll.h:100</div></div>
<div class="ttc" id="aclasscore_1_1Socket_html"><div class="ttname"><a href="classcore_1_1Socket.html">core::Socket</a></div><div class="ttdef"><b>Definition:</b> Socket.h:34</div></div>
<div class="ttc" id="aclasscore_1_1EPoll_html_acfcef2513d94f7b9a191fed3dc744d90"><div class="ttname"><a href="classcore_1_1EPoll.html#acfcef2513d94f7b9a191fed3dc744d90">core::EPoll::maxSockets</a></div><div class="ttdeci">int maxSockets</div><div class="ttdoc">The maximum number of socket allowed.</div><div class="ttdef"><b>Definition:</b> EPoll.h:83</div></div>
<div class="ttc" id="aclasscore_1_1TCPSession_html"><div class="ttname"><a href="classcore_1_1TCPSession.html">core::TCPSession</a></div><div class="ttdef"><b>Definition:</b> TCPSession.h:26</div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->