[gold commit] PR gold/14860: Fix race condition.

Cary Coutant ccoutant@google.com
Thu Nov 14 21:12:00 GMT 2013


>> This patch fixes a race condition in Eh_frame_hdr::record_fde. When
>> running multi-threaded, many Write_sections tasks may call record_fde_,
>> which pushes an entry onto a shared vector. We need to hold a lock
>> while modifying the vector.
>
> I don't see how this could happen.  I think there is only one Eh_frame
> section, created in Layout::make_eh_frame_section.  And I think the
> only place that an FDE is written out is when the Eh_frame section is
> written out, and I think that only happens once.  What am I missing?

Ugh, you're right. I was thinking Fde::write was called while writing
out input sections, but indeed the .eh_frame sections are all handled
as part of the one output section, in Write_sections_task.

>> +       Hold_lock(*this->lock_);
>
> I don't think this works.  I think you need to write
>     Hold_lock hl(*this->lock_);

Ugh, again. I have no idea what I was doing when I wrote that. I was
copying an idiom used in several other places, so I should have gotten
that right.

Anyway, it seems there is no real race condition here, so the drop in
frequency of asserts must have been an anomaly (or the patch caused a
sufficient perturbation to hide it better). I'll revert this patch.
Sorry!

Back to the drawing board...

-cary



More information about the Binutils mailing list