I don't think there's actually a problem, but I could be wrong.  Here's why:

If table is null here, and then threadLoadData's thread calls loadData(), then table will get set.  Line 57 will call loadData(), but loadData() will return immediately (lines 90-91).  And we don't need to worry about two threads being in loadData(), because it's synchroinzed.

In general, the intent of the threaded loading is to avoid slowing down Lantern startup, rather than the tests.  My expectation is that table will never be null here, because by the time getGeoData is called, the background loading process will be complete.  But if it is null, we should wait for it.