mdbx 0.3.7 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a6e52e1e3c29ff83b8b472a9c2c4be8388a03047e940926099b69f667195e747
4
- data.tar.gz: b3b90a64cdc1d4f6efda2a99a62d4dbd6d6631e97ab752faaf82e52138d18063
3
+ metadata.gz: 6b8f04217532c9bd383ac918ac4ba724fa31e7a1e43335c1f084f13189f87b00
4
+ data.tar.gz: 54b3b4818240872fa8f973dbf52f1f1f5680e8508642d2fa4534e9346ae76411
5
5
  SHA512:
6
- metadata.gz: 49448d4e973b42011c668e6524a7220085d244ade0f1a1710a107c1a579e8d90f90c89263e724961c28dff8c649787b992ca2f27d54992659ef148b4df937ecc
7
- data.tar.gz: 52ce31f2c60f9a7ff38a3f486f4fb578d68d8173db3219e6303900d4d3fd4f1fbb627d88d05592676e05daac563bb547b827879e56c5b34a4f561a14063d7d27
6
+ metadata.gz: 69df23a8da7d594571015ce0ab129582d9ca534eb10c127ffd0c046035ed13746fd0855aa796f3c228c750f6f34ddc052017e79df0f2c4bf649528ead6d91072
7
+ data.tar.gz: 6f35e9127312f645f7e2bf29be1644e3b67ad5a27e5f8ce6eb7e81d2b5b1a58610b8d8c1ba571df994054bc1d6d7d575073b6b5098c19dcb22f099647bab7aae
checksums.yaml.gz.sig CHANGED
Binary file
data/History.md CHANGED
@@ -1,5 +1,21 @@
1
1
  # Release History for MDBX
2
2
 
3
+ ---
4
+ ## v0.4.0 [2025-04-30] Mahlon E. Smith <mahlon@martini.nu>
5
+
6
+ Enhancements:
7
+
8
+ - Opening a long running transaction is now thread safe.
9
+
10
+
11
+ ---
12
+ ## v0.3.8 [2025-02-20] Mahlon E. Smith <mahlon@martini.nu>
13
+
14
+ Build fixes:
15
+
16
+ - Don't fail during compilation on pre 0.13.x libmdbx versions.
17
+
18
+
3
19
  ---
4
20
  ## v0.3.7 [2025-02-06] Mahlon E. Smith <mahlon@martini.nu>
5
21
 
@@ -465,6 +465,26 @@ rmdbx_in_transaction_p( VALUE self )
465
465
  }
466
466
 
467
467
 
468
+ /* Inline struct for transaction arguments, passed as a void pointer. */
469
+ struct txn_open_args_s {
470
+ rmdbx_db_t *db;
471
+ int rwflag;
472
+ };
473
+
474
+
475
+ /* Opens a transaction outside of the GVL. */
476
+ void *
477
+ rmdbx_open_txn_without_gvl( void *ptr )
478
+ {
479
+ struct txn_open_args_s *txn_open_args = (struct txn_open_args_s *)ptr;
480
+
481
+ rmdbx_db_t *db = txn_open_args->db;
482
+ int rc = mdbx_txn_begin( db->env, NULL, txn_open_args->rwflag, &db->txn );
483
+
484
+ return (void *)rc;
485
+ }
486
+
487
+
468
488
  /*
469
489
  * Open a new database transaction. If a transaction is already
470
490
  * open, this is a no-op.
@@ -476,7 +496,17 @@ rmdbx_open_txn( rmdbx_db_t *db, int rwflag )
476
496
  {
477
497
  if ( db->txn ) return;
478
498
 
479
- int rc = mdbx_txn_begin( db->env, NULL, rwflag, &db->txn );
499
+ struct txn_open_args_s txn_open_args;
500
+ txn_open_args.db = db;
501
+ txn_open_args.rwflag = rwflag;
502
+
503
+ void *result_ptr = rb_thread_call_without_gvl(
504
+ rmdbx_open_txn_without_gvl, (void *)&txn_open_args,
505
+ RUBY_UBF_IO, NULL
506
+ );
507
+
508
+ int rc = (int)result_ptr;
509
+
480
510
  if ( rc != MDBX_SUCCESS ) {
481
511
  rmdbx_close_all( db );
482
512
  rb_raise( rmdbx_eDatabaseError, "mdbx_txn_begin: (%d) %s", rc, mdbx_strerror(rc) );
@@ -805,8 +835,13 @@ rmdbx_database_initialize( int argc, VALUE *argv, VALUE self )
805
835
  if ( RTEST(opt) ) db->settings.env_flags = db->settings.env_flags | MDBX_NOSUBDIR;
806
836
  opt = rb_hash_delete( opts, ID2SYM( rb_intern("no_readahead") ) );
807
837
  if ( RTEST(opt) ) db->settings.env_flags = db->settings.env_flags | MDBX_NORDAHEAD;
838
+ #if defined(HAVE_CONST_MDBX_NOSTICKYTHREADS)
808
839
  opt = rb_hash_delete( opts, ID2SYM( rb_intern("no_stickythreads") ) );
809
840
  if ( RTEST(opt) ) db->settings.env_flags = db->settings.env_flags | MDBX_NOSTICKYTHREADS;
841
+ #else
842
+ opt = rb_hash_delete( opts, ID2SYM( rb_intern("no_threadlocal") ) );
843
+ if ( RTEST(opt) ) db->settings.env_flags = db->settings.env_flags | MDBX_NOTLS;
844
+ #endif
810
845
  opt = rb_hash_delete( opts, ID2SYM( rb_intern("readonly") ) );
811
846
  if ( RTEST(opt) ) db->settings.env_flags = db->settings.env_flags | MDBX_RDONLY;
812
847
  opt = rb_hash_delete( opts, ID2SYM( rb_intern("writemap") ) );
@@ -9,6 +9,8 @@ $CFLAGS << ' -Wno-unknown-warning-option'
9
9
  have_library( 'mdbx' ) or abort "No mdbx library!"
10
10
  have_header( 'mdbx.h' ) or abort "No mdbx.h header!"
11
11
 
12
+ have_const( 'MDBX_NOSTICKYTHREADS', 'mdbx.h' )
13
+
12
14
  create_header()
13
15
  create_makefile( 'mdbx_ext' )
14
16
 
@@ -1,5 +1,6 @@
1
1
 
2
2
  #include <ruby.h>
3
+ #include <ruby/thread.h>
3
4
  #include "extconf.h"
4
5
 
5
6
  #include "mdbx.h"
data/lib/mdbx.rb CHANGED
@@ -13,7 +13,7 @@ module MDBX
13
13
  extend Loggability
14
14
 
15
15
  # The version of this gem.
16
- VERSION = '0.3.7'
16
+ VERSION = '0.4.0'
17
17
 
18
18
 
19
19
  log_as :mdbx
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mdbx
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.7
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mahlon E. Smith
@@ -34,7 +34,7 @@ cert_chain:
34
34
  49pOzX5KHZLTS9DKeaP/xcGPz6C8MiwQdYrZarr2SHRASX1zFa79rkItO8kE6RDr
35
35
  b6WDF79UvZ55ajtE00TiwqjQL/ZPEtbd
36
36
  -----END CERTIFICATE-----
37
- date: 2025-02-06 00:00:00.000000000 Z
37
+ date: 2025-04-30 00:00:00.000000000 Z
38
38
  dependencies:
39
39
  - !ruby/object:Gem::Dependency
40
40
  name: loggability
metadata.gz.sig CHANGED
Binary file