Skip to content

Commit 99334d3

Browse files
committed
fixed race condition
1 parent da1add8 commit 99334d3

File tree

6 files changed

+10100
-9
lines changed

6 files changed

+10100
-9
lines changed

Assets/UXF/Scripts/Session.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -332,7 +332,10 @@ public void Begin(string experimentName, string participantId, string baseFolder
332332
onSessionBegin.Invoke(this);
333333

334334
// copy Settings to session folder
335-
WriteDictToSessionFolder(settings.baseDict, "settings");
335+
336+
WriteDictToSessionFolder(
337+
new Dictionary<string, object>(settings.baseDict), // makes a copy
338+
"settings");
336339
}
337340

338341

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
using UnityEngine;
2+
using UnityEditor;
3+
using UnityEngine.TestTools;
4+
using NUnit.Framework;
5+
using System;
6+
using System.Collections;
7+
using System.Collections.Generic;
8+
using System.IO;
9+
10+
namespace UXF.Tests
11+
{
12+
13+
public class TestMultithreading
14+
{
15+
16+
GameObject gameObject;
17+
Session session;
18+
FileIOManager fileIOManager;
19+
SessionLogger sessionLogger;
20+
21+
[SetUp]
22+
public void SetUp()
23+
{
24+
gameObject = new GameObject();
25+
fileIOManager = gameObject.AddComponent<FileIOManager>();
26+
sessionLogger = gameObject.AddComponent<SessionLogger>();
27+
session = gameObject.AddComponent<Session>();
28+
29+
session.AttachReferences(
30+
fileIOManager,
31+
sessionLogger
32+
);
33+
34+
sessionLogger.AttachReferences(
35+
fileIOManager,
36+
session
37+
);
38+
39+
sessionLogger.Initialise();
40+
41+
fileIOManager.debug = true;
42+
fileIOManager.Begin();
43+
44+
}
45+
46+
[TearDown]
47+
public void TearDown()
48+
{
49+
fileIOManager.End();
50+
GameObject.DestroyImmediate(gameObject);
51+
}
52+
53+
[Test]
54+
public void AddSettingsDuringWriting()
55+
{
56+
string experimentName = "unit_test";
57+
string ppid = "test_trials";
58+
Settings settings = Settings.empty;
59+
60+
// initialise settings
61+
for (int i = 0; i < 10000; i++)
62+
{
63+
string key = i.ToString();
64+
settings[key] = i;
65+
}
66+
67+
session.Begin(experimentName, ppid, "example_output", settings: settings);
68+
69+
// add lots more during potential writing
70+
for (int i = 0; i < 10000; i++)
71+
{
72+
string key = "_" + i.ToString();
73+
settings[key] = i;
74+
}
75+
76+
session.End();
77+
}
78+
79+
}
80+
81+
}

Assets/UXF/Scripts/Tests/Editor/TestMultithreading.cs.meta

Lines changed: 13 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
timestamp,log_type,message
2-
1.435732,Log,Joining FileIOManagerThread
2+
1.423677,Log,Joining FileIOManagerThread

0 commit comments

Comments
 (0)