| Project Name | CID | Checker | Category | Developer Description |
|---|---|---|---|---|
| OpenRA/OpenRA | 111052 | BAD_LOCK_OBJECT | Unreliable locking behavior | We didn't figure ourselves where those threading issues came from and tried to hide them with hacks. https://github.com/OpenRA/OpenRA/pull/3727 Now it can finally be properly fixed. |
59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
mixerSprite = new Sprite(mixerSheet, rect, TextureChannel.Alpha);
}
void GenerateBitmap()
{
// Generating the selection bitmap is slow,
// so we do it in a background thread
lock (syncWorker)
{
update = true;
if (workerThread == null || !workerAlive)
{
workerThread = new Thread(GenerateBitmapWorker);
workerThread.Start();
}
}
}
void GenerateBitmapWorker()
{
lock (syncWorker)
workerAlive = true;
|
< 1. Condition "true", taking true branch
83 |
for (;;)
|
< 1. Condition "true", taking true branch
84 85 86 87 |
{
float hue;
lock (syncWorker)
{
|
< 2. Condition "!this.update", taking false branch
88 |
if (!update)
|
< 2. Condition "!this.update", taking false branch
89 90 91 92 93 94 95 96 97 98 99 |
{
workerAlive = false;
break;
}
update = false;
// Take a local copy of the hue to generate to avoid tearing
hue = H;
}
|
<< 3. Acquiring lock "ColorMixerWidget.back".
100 |
lock (back) |
<< 3. Acquiring lock "ColorMixerWidget.back".
101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 |
{
unsafe
{
// Generate palette in HSV
fixed (byte* cc = &back[0])
{
var c = (int*)cc;
for (var v = 0; v < 256; v++)
for (var s = 0; s < 256; s++)
*(c + (v * 256) + s) = HSLColor.FromHSV(hue, s / 255f, (255 - v) / 255f).RGB.ToArgb();
}
}
lock (front)
{
var swap = front;
front = back;
back = swap;
}
}
}
}
public override void Draw()
{
if (Monitor.TryEnter(front))
{
|
| 3. lock_acquire | ColorMixerWidget.cs:100 | |
| 3. lock_acquire | ColorMixerWidget.cs:100 | |
| 3. lock_acquire | ColorMixerWidget.cs:100 | |
| 3. lock_acquire | ColorMixerWidget.cs:101 | |
| 3. lock_acquire | ColorMixerWidget.cs:101 | |
| 3. lock_acquire | ColorMixerWidget.cs:101 |