For those following along, I may have been premature in my declaration of total victory, as the solution only seems to work with pike 7.9 (where it seems to work with very few issues). When used with 7.8, I get lots of errors like so:
/usr/local/pike/7.8.352/lib/modules/Protocols.pmod/HTTP.pmod/module.pmod:161:Got placeholder object when indexing module HTTP with 'Query'. (Resolver problem.)
The problem appears to be the programs and objects mappings in the master. If I replace either, these problems happen. If use the existing mappings from the current master (moved before using replace_master()), things work properly. If I do a shallow copy, things fail, so I'm inclined to believe that somethings holding on to those mappings, perhaps in dirnode().
Note that at this point, the error occurs before trying to use multiple compile environments; so it doesn't seem like it could be a matter of disjoint data for the resolver.
I haven't compared the differences between the two masters, but I know that changes were made to the resolver, correct?
Anyhow care to venture a guess as to the source of the problem?
Bill
On Thu, 15 Mar 2012, H. William Welliver III wrote:
It turns out that using `->symbol and some other minor magic can be used to solve all of the problems I've been concerned about. I've run some simple tests that show two different threads with independent module/program paths that seem to be (almost) completely isolated from each other. The only code they share with each other is the standard set of static modules (which is an acceptable situation that could also be changed).