Archive for July, 2010

Google Desktop Hangs MS Compiler

We finally upgraded our compiler we use for ObectStudio8 from VisualStudio 6.0 to VisualStudio 2008. In that process we moved away from plain makefiles and used the project files generated by the IDE.

Then I wrote a build script for our automated build machine. What could be better than to use MSBuild? It understands the project structure of VisualStudio, recompute the dependencies and it can use all available CPU’s.

The only problem I had was, that the sub-process cl.exe (the compiler itself) would hang.

After debugging the compiler (something I try to avoid usually) I found the culprit. MS Support finally confirmed it.

Google Desktop is to blame!!

The DLL GoogleDesktopNetwork3.dll is somehow injected into the compile process and while it’s loaded, does something to reinitialize RPC and waits for the global RPC critical section. The compiler uses RPC to communicate with other processes and tries to load rpcrt4.dll, which blocks, because GoogleDesktopNetwork3.dll:DllMain is not finished.

A typical deadlock situation! It’s called LoaderLock.

Microsoft already has a couple of pages written about that situation and what you should and should not do during the DllMain call.

Maybe someone at Google should take the time and read those?

Quis Custodiet Ipsos Custodes?

Easing Frustration with Round Trip Engineering

Other development environments have things like the modeling tool. I remember one that Cincom was evaluating a while back. Their business model was to make the tool pretty cheap, but charge you every time you wanted to generate code. If you wanted to modify the default code generation you could do that by putting in some kind of rules to override it. But think what a pain that would be. You would do your design, generate some code, test it out, figure out what didn’t work, figure out how it should be different, figure out how to write the rules to generate different code, regenerate, recompile, retest. SLOW.

Round trip engineering means that you can create your model, generate and test, and fix it or continue development in the running system, like all Smalltalk development. When you have it the way you want it, you push a button to resynchronize, and the system knows how to import the current state of the art back into the model. Easy!