http://bugs.winehq.org/show_bug.cgi?id=29582
--- Comment #4 from Daniel Santos daniel.santos@pobox.com 2012-01-14 01:49:07 CST --- well, it would appear that I'm wrong about the call the call to SetFilePointer -- it returned zero because that was the low-order of the file pointer position (oops). Either way, the app definitely enters a race condition of some sort. In another sample, I found a thread spinning calling WaitForSingleObject on a semaphore followed by ReleaseSemaphore on that same handle for about a solid second. Isolating the root cause (from Wine's end of it) of this race condition looks pretty difficult.
Also, I was slightly off on my numbers. My hack only reduced load time by about 45%. Normally it takes about 80 seconds to load and the hack reduced it to 45 seconds. Setting the misbehaving thread's priority lower doesn't help because that thread appears to be what opens the data files (that are "loaded"), even though it passes those handles off to another thread to actually read them (strange). It appears to be the coordination between those two threads that's going awry.