BDB deadlock problem
From: <cmpilato_at_collab.net>
Date: 2002-06-19 19:30:36 CEST
If you are Clueful, please see this document:
http://www.sleepycat.com/docs/ref/cam/intro.html
And the following function (in strings-table.c), and let the list know
--
svn_error_t *
svn_fs__string_copy (svn_fs_t *fs,
const char **new_key,
const char *key,
trail_t *trail)
{
DBT query;
DBT result;
DBT copykey;
DBC *cursor;
int db_err;
/* Copy off the old key in case the caller is sharing storage
between the old and new keys. */
const char *old_key = apr_pstrdup (trail->pool, key);
SVN_ERR (get_key_and_bump (fs, new_key, trail));
SVN_ERR (DB_WRAP (fs, "creating cursor for reading a string",
fs->strings->cursor (fs->strings, trail->db_txn,
&cursor, 0)));
svn_fs__str_to_dbt (&query, (char *) old_key);
svn_fs__str_to_dbt (©key, (char *) *new_key);
svn_fs__clear_dbt (&result);
/* Move to the first record and fetch its data (under BDB's mem mgmt). */
db_err = cursor->c_get (cursor, &query, &result, DB_SET);
if (db_err)
{
cursor->c_close (cursor);
return DB_WRAP (fs, "getting next-key value", db_err);
}
while (1)
{
/* ### can we pass a BDB-provided buffer to another BDB function?
### they are supposed to have a duration up to certain points
### of calling back into BDB, but I'm not sure what the exact
### rules are. it is definitely nicer to use BDB buffers here
### to simplify things and reduce copies, but... hrm.
*/
/* Write the data to the database */
db_err = fs->strings->put (fs->strings, trail->db_txn,
©key, &result, 0);
if (db_err)
{
cursor->c_close (cursor);
return DB_WRAP (fs, "writing copied data", db_err);
}
/* Read the next chunk. Terminate loop if we're done. */
svn_fs__clear_dbt (&result);
db_err = cursor->c_get (cursor, &query, &result, DB_NEXT_DUP);
if (db_err == DB_NOTFOUND)
break;
if (db_err)
{
cursor->c_close (cursor);
return DB_WRAP (fs, "fetching string data for a copy", db_err);
}
}
cursor->c_close (cursor);
return SVN_NO_ERROR;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org
Received on Wed Jun 19 19:27:05 2002
|
This is an archived mail posted to the Subversion Dev mailing list.
This site is subject to the Apache Privacy Policy and the Apache Public Forum Archive Policy.