fenlason f3f9345
Fix a bug that could cause traps or hangs if the DB_TXN->set_name function 
fenlason f3f9345
is used in a multithreaded application. [#14033]
fenlason f3f9345
fenlason f3f9345
fenlason f3f9345
*** txn/txn.c.orig	Tue Nov  1 06:50:03 2005
fenlason f3f9345
--- txn/txn.c	Tue Jan 31 15:05:13 2006
fenlason f3f9345
***************
fenlason f3f9345
*** 1049,1060 ****
fenlason f3f9345
--- 1049,1062 ----
fenlason f3f9345
  		return (ret);
fenlason f3f9345
  	memcpy(txn->name, name, len);
fenlason f3f9345
  
fenlason f3f9345
+ 	TXN_SYSTEM_LOCK(dbenv);
fenlason f3f9345
  	if (td->name != INVALID_ROFF) {
fenlason f3f9345
  		__db_shalloc_free(
fenlason f3f9345
  		    &mgr->reginfo, R_ADDR(&mgr->reginfo, td->name));
fenlason f3f9345
  		td->name = INVALID_ROFF;
fenlason f3f9345
  	}
fenlason f3f9345
  	if ((ret = __db_shalloc(&mgr->reginfo, len, 0, &p)) != 0) {
fenlason f3f9345
+ 		TXN_SYSTEM_UNLOCK(dbenv);
fenlason f3f9345
  		__db_err(dbenv,
fenlason f3f9345
  		    "Unable to allocate memory for transaction name");
fenlason f3f9345
  
fenlason f3f9345
***************
fenlason f3f9345
*** 1063,1068 ****
fenlason f3f9345
--- 1065,1071 ----
fenlason f3f9345
  
fenlason f3f9345
  		return (ret);
fenlason f3f9345
  	}
fenlason f3f9345
+ 	TXN_SYSTEM_UNLOCK(dbenv);
fenlason f3f9345
  	td->name = R_OFFSET(&mgr->reginfo, p);
fenlason f3f9345
  	memcpy(p, name, len);