Hello, I would like to report a race condition regarding the cart data and cartridge restarts.
Consider the following code
value = 0
frame = 0
function _init()
cartdata("race_condition")
value = dget(0)
dset(0,0) -- set value to 0 for next reload with ctrl+r
end
function _update()
if btnp(5) then
dset(0, (value+1)%10) -- increase value by 1
run() -- reset cartridge
end
frame += 1
end
function _draw()
cls()
print("current value: "..value, value+1)
print("frame: "..frame)
end
If you look at it, the expected behavior would be that:
- If you press X, the stored value should increase by 1 (modulus 10) and then the cartridge should restart and load that value.
- If you reset with Ctrl+R, no value is set so it should be reset to 0 because of the dset(0, 0) at the end of the init.
Notice however, that if you run the cartridge and press X, there are 3 possible outcomes:
- Value gets reset to 0.
- Value stays the same.
- Value increases by 1 as intended, but this only seems to happen if the cartridge ran for more than 60 frames.
So my belief is that there is a race condition between the dset() calls of the different times the cartridge is reset, and they fight to write in the cartdata,
