Skip to content

Commit fa54f4d

Browse files
committed
Fixed threading issue
1 parent fddcc7e commit fa54f4d

34 files changed

+40
-1338
lines changed

Assets/UXF/Scripts/FileIOManager.cs

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ public class FileIOManager : MonoBehaviour
3030

3131
bool quitting = false;
3232

33+
public static System.Action doNothing = () => { };
34+
3335
void Awake()
3436
{
3537
Begin();
@@ -40,6 +42,7 @@ public void Begin()
4042
if (t != null && t.IsAlive)
4143
throw new ThreadStateException("Cannot Begin. FileIOManager thread has already been started!");
4244

45+
quitting = false;
4346
t = new Thread(Worker);
4447
t.Start();
4548
}
@@ -147,16 +150,8 @@ public void WriteTrials(List<OrderedResultDict> dataDict, string[] headers, stri
147150

148151
for (int i = 1; i <= dataDict.Count; i++)
149152
{
150-
try
151-
{
152-
dataDict[i - 1].Values.CopyTo(row, 0);
153-
csvRows[i] = string.Join(",", row.Select(v => v.ToString()).ToArray());
154-
}
155-
catch (System.NullReferenceException)
156-
{
157-
158-
}
159-
153+
dataDict[i - 1].Values.CopyTo(row, 0);
154+
csvRows[i] = string.Join(",", row.Select(v => System.Convert.ToString(v)).ToArray());
160155
}
161156

162157
File.WriteAllLines(fpath, csvRows);
@@ -223,6 +218,8 @@ public void End()
223218
if (debug)
224219
Debug.Log("Joining FileIOManagerThread");
225220
quitting = true;
221+
222+
bq.Enqueue(doNothing); // ensures bq breaks from foreach loop
226223
t.Join();
227224
}
228225

Assets/UXF/Scripts/Tests/Editor/TestFileIOManager.cs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,26 @@ public void WriteManyFiles()
6868
System.IO.File.Delete(file);
6969
}
7070
}
71+
72+
73+
[Test]
74+
public void EarlyExit()
75+
{
76+
fileIOManager.Begin();
77+
fileIOManager.End();
78+
79+
Assert.Throws<System.InvalidOperationException>(
80+
() => {
81+
fileIOManager.ManageInWorker(() => Debug.Log("Code enqueued after FileIOManager ended"));
82+
}
83+
);
84+
85+
fileIOManager.Begin();
86+
fileIOManager.ManageInWorker(() => Debug.Log("Code enqueued after FileIOManager re-opened"));
87+
fileIOManager.End();
88+
89+
}
90+
7191
}
7292

7393
}

Assets/UXF/Scripts/Tests/Editor/TestTrials.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,16 @@ public void SetUp()
3636
session
3737
);
3838

39+
sessionLogger.Initialise();
40+
3941
fileIOManager.debug = true;
4042
fileIOManager.Begin();
4143

4244
string experimentName = "unit_test";
4345
string ppid = "test_trials";
4446
session.Begin(experimentName, ppid, "example_output");
4547
session.customHeaders.Add("observation");
48+
session.customHeaders.Add("null_observation");
4649

4750
// generate trials
4851
session.CreateBlock(2);
@@ -65,9 +68,10 @@ public void RunTrials()
6568
{
6669
trial.Begin();
6770
trial.result["observation"] = ++i;
71+
trial.result["null_observation"] = null;
6872

6973
Assert.Throws<KeyNotFoundException>(
70-
delegate { trial.result["other_observation"] = "something"; }
74+
delegate { trial.result["not_customheader_observation"] = "something"; }
7175
);
7276

7377
Assert.AreSame(trial, session.currentTrial);

example_output/basic_example_1/P_180504130057/S001/log.csv

Lines changed: 0 additions & 16 deletions
This file was deleted.

example_output/basic_example_1/P_180504130057/S001/mygameobject_movement_T001.csv

Lines changed: 0 additions & 61 deletions
This file was deleted.

example_output/basic_example_1/P_180504130057/S001/mygameobject_movement_T002.csv

Lines changed: 0 additions & 61 deletions
This file was deleted.

example_output/basic_example_1/P_180504130057/S001/mygameobject_movement_T003.csv

Lines changed: 0 additions & 61 deletions
This file was deleted.

example_output/basic_example_1/P_180504130057/S001/mygameobject_movement_T004.csv

Lines changed: 0 additions & 35 deletions
This file was deleted.

example_output/basic_example_1/P_180504130057/S001/settings.json

Lines changed: 0 additions & 5 deletions
This file was deleted.

example_output/basic_example_1/P_180504130057/S001/trial_results.csv

Lines changed: 0 additions & 16 deletions
This file was deleted.

0 commit comments

Comments
 (0)