<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body dir="ltr">
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
I am not clear whether your volatile is a file level or function level variable<br>
i.e. does your code look like this...</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
BEFORE</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
    Data buffer[buffersize];</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
    void func() {</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
        volatile S v = { buffer, m2, ... };</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
    }</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
AFTER<br>
<br>
<span style="margin:0px;font-size:12pt">    void func() {</span>
<div style="margin:0px;font-size:12pt"><br>
</div>
<div style="margin:0px;font-size:12pt">        volatile S v;</div>
<div style="margin:0px;font-size:12pt">         </div>
<div style="margin:0px;font-size:12pt">         v.m1 = buffer;</div>
<div style="margin:0px;font-size:12pt">         <span style="margin:0px;font-size:12pt;background-color:rgb(255, 255, 255)">v.m2 = m2;</span></div>
<div style="margin:0px;font-size:12pt">         ...<br>
         tell_someone_they_can_use_v_to_access_buffer(&v);</div>
<div style="margin:0px;font-size:12pt"><br>
</div>
<div style="margin:0px;font-size:12pt">    }</div>
<span style="margin:0px;font-size:12pt"></span><br>
OR like this <br>
<br>
<span style="margin:0px;font-size:12pt">    Data buffer[buffersize];</span>
<div style="margin:0px;font-size:12pt"><span style="margin:0px;font-size:12pt;background-color:rgb(255, 255, 255)">    volatile S v; // old code = { buffer, m2, ... };</span>
<div style="margin:0px;font-size:12pt;background-color:rgb(255, 255, 255)"><br>
</div>
</div>
<div style="margin:0px;font-size:12pt">    void func() {</div>
<div style="margin:0px;font-size:12pt">        // new code</div>
<div style="margin:0px;font-size:12pt"><span style="margin:0px;font-size:12pt;background-color:rgb(255, 255, 255)">         v.m1 = buffer;</span>
<div style="margin:0px;font-size:12pt;background-color:rgb(255, 255, 255)">         <span style="margin:0px;background-color:rgb(255, 255, 255)">v.m2 = m2;</span></div>
<div style="margin:0px;font-size:12pt;background-color:rgb(255, 255, 255)">         ...<br>
         tell_someone_they_can_use_v_to_access_buffer(&v);</div>
<div style="margin:0px;font-size:12pt;background-color:rgb(255, 255, 255)"><span style="font-size: 12pt;">    }</span><br>
</div>
</div>
<span style="margin:0px;font-size:12pt"></span><br>
Which is v?   a global or a function local?<br>
<br>
<span style="background-color:rgb(255, 255, 255);display:inline !important">Perhaps you have a race between the initialization and use of v.</span></div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
<span style="background-color:rgb(255, 255, 255);display:inline !important">The initialization of non-function statics and globals happens in C++ in a somewhat  unpredictable order, but before main() is called, as the complicated description you linked to describes.<br>
</span><br>
<span style="background-color:rgb(255, 255, 255);display:inline !important">Also I suspect buffer should be volatile.</span></div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
/Bevin</div>
</body>
</html>