<?xml version="1.0"?>

<valgrindoutput>

<protocolversion>4</protocolversion>
<protocoltool>helgrind</protocoltool>

<preamble>
  <line>Helgrind, a thread error detector</line>
  <line>Copyright (C) XXXX-YYYY, and GNU GPL'd, by OpenWorks LLP et al.</line>
  <line>Using Valgrind-X.Y.X and LibVEX; rerun with -h for copyright info</line>
  <line>Command: ./tc06_two_races</line>
</preamble>

<pid>...</pid>
<ppid>...</ppid>
<tool>helgrind</tool>

<args>
  <vargv>
    <exe>...</exe>
    <arg>--command-line-only=yes</arg>
    <arg>--memcheck:leak-check=no</arg>
    <arg>--tool=helgrind</arg>
    <arg>--read-var-info=yes</arg>
    <arg>--xml=yes</arg>
    <arg>--xml-fd=2</arg>
    <arg>--log-file=/dev/null</arg>
  </vargv>
  <argv>
    <exe>...</exe>
  </argv>
</args>

<status>
  <state>RUNNING</state>
  <time>...</time>
</status>

<announcethread>
  <hthreadid>1</hthreadid>
  <isrootthread></isrootthread>
</announcethread>

<announcethread>
  <hthreadid>2</hthreadid>
  <stack>
    <frame>...</frame>
    <frame>
      <ip>0x........</ip>
      <obj>...</obj>
      <fn>pthread_create_WRK</fn>
      <dir>...</dir>
      <file>hg_intercepts.c</file>
      <line>...</line>
    </frame>
    <frame>
      <ip>0x........</ip>
      <obj>...</obj>
      <fn>pthread_create@*</fn>
      <dir>...</dir>
      <file>hg_intercepts.c</file>
      <line>...</line>
    </frame>
    <frame>
      <ip>0x........</ip>
      <obj>...</obj>
      <fn>main</fn>
      <dir>...</dir>
      <file>tc06_two_races.c</file>
      <line>26</line>
    </frame>
  </stack>
</announcethread>

<error>
  <unique>...</unique>
  <tid>...</tid>
  <kind>Race</kind>
  <xwhat>
    <text>Possible data race during read of size 4 at 0x........ by thread #x</text>
    <hthreadid>1</hthreadid>
  </xwhat>
  <stack>
    <frame>
      <ip>0x........</ip>
      <obj>...</obj>
      <fn>main</fn>
      <dir>...</dir>
      <file>tc06_two_races.c</file>
      <line>31</line>
    </frame>
  </stack>
  <xauxwhat>
    <text>This conflicts with a previous write of size 4 by thread #x</text>
    <hthreadid>2</hthreadid>
  </xauxwhat>
  <stack>
    <frame>
      <ip>0x........</ip>
      <obj>...</obj>
      <fn>child_fn</fn>
      <dir>...</dir>
      <file>tc06_two_races.c</file>
      <line>14</line>
    </frame>
    <frame>
      <ip>0x........</ip>
      <obj>...</obj>
      <fn>mythread_wrapper</fn>
      <dir>...</dir>
      <file>hg_intercepts.c</file>
      <line>...</line>
    </frame>
    <frame>...</frame>
  </stack>
  <auxwhat>Location 0x........ is 0 bytes inside global var "unprot1"</auxwhat>
  <xauxwhat><text>declared at tc06_two_races.c:9</text> <file>tc06_two_races.c</file> <line>9</line> </xauxwhat>
</error>

<error>
  <unique>...</unique>
  <tid>...</tid>
  <kind>Race</kind>
  <xwhat>
    <text>Possible data race during write of size 4 at 0x........ by thread #x</text>
    <hthreadid>1</hthreadid>
  </xwhat>
  <stack>
    <frame>
      <ip>0x........</ip>
      <obj>...</obj>
      <fn>main</fn>
      <dir>...</dir>
      <file>tc06_two_races.c</file>
      <line>31</line>
    </frame>
  </stack>
  <xauxwhat>
    <text>This conflicts with a previous write of size 4 by thread #x</text>
    <hthreadid>2</hthreadid>
  </xauxwhat>
  <stack>
    <frame>
      <ip>0x........</ip>
      <obj>...</obj>
      <fn>child_fn</fn>
      <dir>...</dir>
      <file>tc06_two_races.c</file>
      <line>14</line>
    </frame>
    <frame>
      <ip>0x........</ip>
      <obj>...</obj>
      <fn>mythread_wrapper</fn>
      <dir>...</dir>
      <file>hg_intercepts.c</file>
      <line>...</line>
    </frame>
    <frame>...</frame>
  </stack>
  <auxwhat>Location 0x........ is 0 bytes inside global var "unprot1"</auxwhat>
  <xauxwhat><text>declared at tc06_two_races.c:9</text> <file>tc06_two_races.c</file> <line>9</line> </xauxwhat>
</error>

<error>
  <unique>...</unique>
  <tid>...</tid>
  <kind>Race</kind>
  <xwhat>
    <text>Possible data race during read of size 4 at 0x........ by thread #x</text>
    <hthreadid>1</hthreadid>
  </xwhat>
  <stack>
    <frame>
      <ip>0x........</ip>
      <obj>...</obj>
      <fn>main</fn>
      <dir>...</dir>
      <file>tc06_two_races.c</file>
      <line>35</line>
    </frame>
  </stack>
  <xauxwhat>
    <text>This conflicts with a previous write of size 4 by thread #x</text>
    <hthreadid>2</hthreadid>
  </xauxwhat>
  <stack>
    <frame>
      <ip>0x........</ip>
      <obj>...</obj>
      <fn>child_fn</fn>
      <dir>...</dir>
      <file>tc06_two_races.c</file>
      <line>18</line>
    </frame>
    <frame>
      <ip>0x........</ip>
      <obj>...</obj>
      <fn>mythread_wrapper</fn>
      <dir>...</dir>
      <file>hg_intercepts.c</file>
      <line>...</line>
    </frame>
    <frame>...</frame>
  </stack>
  <auxwhat>Location 0x........ is 0 bytes inside global var "unprot2"</auxwhat>
  <xauxwhat><text>declared at tc06_two_races.c:9</text> <file>tc06_two_races.c</file> <line>9</line> </xauxwhat>
</error>

<error>
  <unique>...</unique>
  <tid>...</tid>
  <kind>Race</kind>
  <xwhat>
    <text>Possible data race during write of size 4 at 0x........ by thread #x</text>
    <hthreadid>1</hthreadid>
  </xwhat>
  <stack>
    <frame>
      <ip>0x........</ip>
      <obj>...</obj>
      <fn>main</fn>
      <dir>...</dir>
      <file>tc06_two_races.c</file>
      <line>35</line>
    </frame>
  </stack>
  <xauxwhat>
    <text>This conflicts with a previous write of size 4 by thread #x</text>
    <hthreadid>2</hthreadid>
  </xauxwhat>
  <stack>
    <frame>
      <ip>0x........</ip>
      <obj>...</obj>
      <fn>child_fn</fn>
      <dir>...</dir>
      <file>tc06_two_races.c</file>
      <line>18</line>
    </frame>
    <frame>
      <ip>0x........</ip>
      <obj>...</obj>
      <fn>mythread_wrapper</fn>
      <dir>...</dir>
      <file>hg_intercepts.c</file>
      <line>...</line>
    </frame>
    <frame>...</frame>
  </stack>
  <auxwhat>Location 0x........ is 0 bytes inside global var "unprot2"</auxwhat>
  <xauxwhat><text>declared at tc06_two_races.c:9</text> <file>tc06_two_races.c</file> <line>9</line> </xauxwhat>
</error>


<status>
  <state>FINISHED</state>
  <time>...</time>
</status>

<errorcounts>...</errorcounts>

<suppcounts>...</suppcounts>

</valgrindoutput>

