On Sun, Jan 15, 2006 at 01:00:44PM -0600, Albert Chin wrote: > 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. FYI, here's the truss output on HP-UX of "yum install TWWmgv": ... Setting up Install Process Setting up repositories Baseurl(s) for repo: ['file:///opt/dist/cd/parisc'] Reading repository metadata in from local files Setting up Package Sacks Excluding Incompatible Archs Finished Reading Local RPMDB open("/var/opt/TWWfsw/rpm42/db/__db.001", O_RDWR|O_LARGEFILE|0x100000, 0644) = 6 mmap64(NULL, 16384, PROT_READ|PROT_WRITE, MAP_SHARED|MAP_FILE, 6, 0) = 0xc10f900 open("/var/opt/TWWfsw/rpm42/db/__db.002", O_RDWR|O_LARGEFILE|0x100000, 0644) = 6 mmap64(NULL, 1318912, PROT_READ|PROT_WRITE, MAP_SHARED|MAP_FILE, 6, 0) = 0xc4ba3 open("/var/opt/TWWfsw/rpm42/db/__db.003", O_RDWR|O_LARGEFILE|0x100000, 0644) = 6 mmap64(NULL, 548864, PROT_READ|PROT_WRITE, MAP_SHARED|MAP_FILE, 6, 0) = 0xc4ce50 ... --> Populating transaction set with selected packages. Please wait. Member: TWWxpm.parisc 0-3.4k-9 - u open("//var/opt/TWWfsw/yum24/cache/tww/headers/TWWmgv-3.1.5-4.parisc.hdr", O_RDONLY|O_LARGEFILE, 0666) = 8 open("/var/opt/TWWfsw/rpm42/db/__db.001", O_RDWR|O_LARGEFILE|0x100000, 0644) = 8 mmap64(NULL, 16384, PROT_READ|PROT_WRITE, MAP_SHARED|MAP_FILE, 8, 0) ERR#12 ENOMEM Note the two attempts to mmap /var/opt/TWWfsw/rpm42/db/__db.001. -- albert chin (china@xxxxxxxxxxxxxxxxxx)