Submitted By: Bruce Dubbs Date: 2006-07-29 Initial Package Version: 4.4.20 Origin: Sleepycat Description: Fix bugs that could cause traps *** qam/qam_files.c.orig 2005-10-20 11:57:12.000000000 -0700 --- qam/qam_files.c 2006-01-27 13:38:38.000000000 -0800 *************** *** 411,416 **** --- 411,422 ---- DB_APP_DATA, buf, 0, NULL, &real_name)) != 0) goto err; #endif + + mpf = array->mpfarray[offset].mpf; + /* This extent my already be marked for delete and closed. */ + if (mpf == NULL) + goto err; + /* * The log must be flushed before the file is deleted. We depend on * the log record of the last delete to recreate the file if we crash. *************** *** 418,424 **** if (LOGGING_ON(dbenv) && (ret = __log_flush(dbenv, NULL)) != 0) goto err; - mpf = array->mpfarray[offset].mpf; (void)__memp_set_flags(mpf, DB_MPOOL_UNLINK, 1); /* Someone could be real slow, let them close it down. */ if (array->mpfarray[offset].pinref != 0) --- 424,429 ---- *** txn/txn.c.orig Tue Nov 1 06:50:03 2005 --- txn/txn.c Tue Jan 31 15:05:13 2006 *************** *** 1049,1060 **** --- 1049,1062 ---- return (ret); memcpy(txn->name, name, len); + TXN_SYSTEM_LOCK(dbenv); if (td->name != INVALID_ROFF) { __db_shalloc_free( &mgr->reginfo, R_ADDR(&mgr->reginfo, td->name)); td->name = INVALID_ROFF; } if ((ret = __db_shalloc(&mgr->reginfo, len, 0, &p)) != 0) { + TXN_SYSTEM_UNLOCK(dbenv); __db_err(dbenv, "Unable to allocate memory for transaction name"); *************** *** 1063,1068 **** --- 1065,1071 ---- return (ret); } + TXN_SYSTEM_UNLOCK(dbenv); td->name = R_OFFSET(&mgr->reginfo, p); memcpy(p, name, len);