Testing before 09f38dc suggested that frameBufferMutex != 0 on the first call to WaitForDisplay, so it was never created. Check why this is, given it ought to be in BSS.
Looks like it is indeed being initialised to 0, but once we've allocated it, the call to GLCD.Init is setting it back to 0, so the give call is hanging.
Testing before 09f38dc suggested that frameBufferMutex != 0 on the first call to WaitForDisplay, so it was never created. Check why this is, given it ought to be in BSS.