On Sun, Jan 15, 2006 at 01:42:39PM -0500, seth vidal wrote: > > > I presume self.rpmdb is what you're talking about. Because it causes > > the __db.### Berkeley DB environment files to be opened, no further > > instances can be opened and mmap()'ed. However, populateTs() in > > yum/depsolve.py does so, causing the problem. > > > > I suppose one option is to stuff self.rpmdb.[member] with any info > > needed by future uses of self.rpmdb and then close the DB after > > self.rpmdb.addDB(). > > > > Maybe I'm missing it - where does populateTs() reopen the rpmdb? The call to self.ts.addInstall(): self.ts.addInstall(hdr, (hdr, rpmfile), txmbr.ts_state) I don't know if it's easy to see this without printf()'s in the Berkeley DB source code. Running strace on the process should also show multiple opens of db.###. You'll see several opens followed by several mmap() calls. Then, you see them again after the call above. In between, the initial mmap()'s have not been munmap()'ed because self.read_ts.ts and self.read_ts are still active. They become inactive in closeRpmDB() but that doesn't occur until yum ends. > Are you talking about the rpmdb or the transaction set? Well, in this case, both open the __db.### environment files. > And what version of rpm are you using this on? rpm-4.2.4. I don't think the version matters though. -- albert chin (china@xxxxxxxxxxxxxxxxxx)