[package] update sources to 4.7.25.3, bump release number (#6100)
[openwrt/svn-archive/archive.git] / libs / db47 / patches / 001-sequence_lock.patch
1 diff -ruN db-4.7.25.NC/sequence/sequence.c db-4.7.25.NC.new/sequence/sequence.c
2 --- db-4.7.25.NC/sequence/sequence.c 2008-05-05 22:25:09.000000000 +0200
3 +++ db-4.7.25.NC.new/sequence/sequence.c 2009-11-08 12:50:27.000000000 +0100
4 @@ -187,7 +187,11 @@
5 if ((ret = __db_get_flags(dbp, &tflags)) != 0)
6 goto err;
7
8 - if (DB_IS_READONLY(dbp)) {
9 + /*
10 + * We can let replication clients open sequences, but must
11 + * check later that they do not update them.
12 + */
13 + if (F_ISSET(dbp, DB_AM_RDONLY)) {
14 ret = __db_rdonly(dbp->env, "DB_SEQUENCE->open");
15 goto err;
16 }
17 @@ -244,6 +248,11 @@
18 if ((ret != DB_NOTFOUND && ret != DB_KEYEMPTY) ||
19 !LF_ISSET(DB_CREATE))
20 goto err;
21 + if (IS_REP_CLIENT(env) &&
22 + !F_ISSET(dbp, DB_AM_NOT_DURABLE)) {
23 + ret = __db_rdonly(env, "DB_SEQUENCE->open");
24 + goto err;
25 + }
26 ret = 0;
27
28 rp = &seq->seq_record;
29 @@ -296,7 +305,12 @@
30 */
31 rp = seq->seq_data.data;
32 if (rp->seq_version == DB_SEQUENCE_OLDVER) {
33 -oldver: rp->seq_version = DB_SEQUENCE_VERSION;
34 +oldver: if (IS_REP_CLIENT(env) &&
35 + !F_ISSET(dbp, DB_AM_NOT_DURABLE)) {
36 + ret = __db_rdonly(env, "DB_SEQUENCE->open");
37 + goto err;
38 + }
39 + rp->seq_version = DB_SEQUENCE_VERSION;
40 if (!F_ISSET(env, ENV_LITTLEENDIAN)) {
41 if (IS_DB_AUTO_COMMIT(dbp, txn)) {
42 if ((ret =
43 @@ -707,6 +721,13 @@
44
45 MUTEX_LOCK(env, seq->mtx_seq);
46
47 + if (handle_check && IS_REP_CLIENT(env) &&
48 + !F_ISSET(dbp, DB_AM_NOT_DURABLE)) {
49 + ret = __db_rdonly(env, "DB_SEQUENCE->get");
50 + goto err;
51 + }
52 +
53 +
54 if (rp->seq_min + delta > rp->seq_max) {
55 __db_errx(env, "Sequence overflow");
56 ret = EINVAL;