@@ -69,23 +69,24 @@ static int _mapcache_cache_lmdb_has_tile(mapcache_context *ctx, mapcache_cache *
6969 MDB_val key , data ;
7070 MDB_txn * txn ;
7171 mapcache_cache_lmdb * cache = (mapcache_cache_lmdb * )pcache ;
72- char * skey = mapcache_util_get_tile_key ( ctx , tile , cache -> key_template , NULL , NULL ) ;
72+ char * skey ;
7373
7474 if (lmdb_env -> is_open == 0 ) {
7575 ctx -> set_error (ctx ,500 ,"lmdb is not open %s" ,cache -> basedir );
7676 return MAPCACHE_FALSE ;
7777 }
78+
79+ skey = mapcache_util_get_tile_key (ctx ,tile ,cache -> key_template ,NULL ,NULL );
80+ key .mv_size = strlen (skey )+ 1 ;
81+ key .mv_data = skey ;
82+
7883 rc = mdb_txn_begin (lmdb_env -> env , NULL , MDB_RDONLY , & txn );
7984 if (rc ) {
8085 ctx -> set_error (ctx ,500 ,"lmdb failed to begin transaction for has_tile in %s:%s" ,cache -> basedir ,mdb_strerror (rc ));
8186 return MAPCACHE_FALSE ;
8287 }
8388
84- key .mv_size = strlen (skey )+ 1 ;
85- key .mv_data = skey ;
86-
8789 rc = mdb_get (txn , lmdb_env -> dbi , & key , & data );
88-
8990 if (rc == 0 ) {
9091 ret = MAPCACHE_TRUE ;
9192 } else if (rc == MDB_NOTFOUND ) {
@@ -107,24 +108,27 @@ static int _mapcache_cache_lmdb_has_tile(mapcache_context *ctx, mapcache_cache *
107108static void _mapcache_cache_lmdb_delete (mapcache_context * ctx , mapcache_cache * pcache , mapcache_tile * tile )
108109{
109110 int rc ;
110- MDB_val key , data ;
111+ MDB_val key ;
111112 MDB_txn * txn ;
112113 mapcache_cache_lmdb * cache = (mapcache_cache_lmdb * )pcache ;
113- char * skey = mapcache_util_get_tile_key ( ctx , tile , cache -> key_template , NULL , NULL ) ;
114+ char * skey ;
114115
115116 if (lmdb_env -> is_open == 0 ) {
116117 ctx -> set_error (ctx ,500 ,"lmdb is not open %s" ,cache -> basedir );
117118 return ;
118119 }
120+
121+ skey = mapcache_util_get_tile_key (ctx ,tile ,cache -> key_template ,NULL ,NULL );
122+ key .mv_size = strlen (skey )+ 1 ;
123+ key .mv_data = skey ;
124+
119125 rc = mdb_txn_begin (lmdb_env -> env , NULL , 0 , & txn );
120126 if (rc ) {
121127 ctx -> set_error (ctx ,500 ,"lmdb failed to begin transaction for delete in %s:%s" ,cache -> basedir ,mdb_strerror (rc ));
122128 return ;
123129 }
124130
125- key .mv_size = strlen (skey )+ 1 ;
126- key .mv_data = skey ;
127- rc = mdb_del (txn , lmdb_env -> dbi , & key , & data );
131+ rc = mdb_del (txn , lmdb_env -> dbi , & key , NULL );
128132 if (rc ) {
129133 if (rc == MDB_NOTFOUND ) {
130134 ctx -> log (ctx ,MAPCACHE_DEBUG ,"attempt to delete tile %s absent in the db %s" ,skey ,cache -> basedir );
@@ -152,18 +156,18 @@ static int _mapcache_cache_lmdb_get(mapcache_context *ctx, mapcache_cache *pcach
152156 ctx -> set_error (ctx ,500 ,"lmdb is not open %s" ,cache -> basedir );
153157 return MAPCACHE_FALSE ;
154158 }
159+
160+ skey = mapcache_util_get_tile_key (ctx ,tile ,cache -> key_template ,NULL ,NULL );
161+ key .mv_size = strlen (skey )+ 1 ;
162+ key .mv_data = skey ;
163+
155164 rc = mdb_txn_begin (lmdb_env -> env , NULL , MDB_RDONLY , & txn );
156165 if (rc ) {
157166 ctx -> set_error (ctx ,500 ,"lmdb failed to begin transaction for get in %s:%s" ,cache -> basedir ,mdb_strerror (rc ));
158167 return MAPCACHE_FALSE ;
159168 }
160169
161- skey = mapcache_util_get_tile_key (ctx ,tile ,cache -> key_template ,NULL ,NULL );
162- key .mv_size = strlen (skey )+ 1 ;
163- key .mv_data = skey ;
164-
165170 rc = mdb_get (txn , lmdb_env -> dbi , & key , & data );
166-
167171 if (rc == 0 ) {
168172 if (((char * )(data .mv_data ))[0 ] == '#' ) {
169173 tile -> encoded_data = mapcache_empty_png_decode (ctx ,tile -> grid_link -> grid -> tile_sx , tile -> grid_link -> grid -> tile_sy , (unsigned char * )data .mv_data ,& tile -> nodata );
@@ -232,6 +236,7 @@ static void _mapcache_cache_lmdb_set(mapcache_context *ctx, mapcache_cache *pcac
232236 ctx -> set_error (ctx ,500 ,"lmdb is not open %s" ,cache -> basedir );
233237 return ;
234238 }
239+
235240 rc = mdb_txn_begin (lmdb_env -> env , NULL , 0 , & txn );
236241 if (rc ) {
237242 ctx -> set_error (ctx ,500 ,"lmdb failed to begin transaction for set in %s:%s" ,cache -> basedir ,mdb_strerror (rc ));
@@ -264,6 +269,7 @@ static void _mapcache_cache_lmdb_multiset(mapcache_context *ctx, mapcache_cache
264269 ctx -> set_error (ctx ,500 ,"lmdb is not open %s" ,cache -> basedir );
265270 return ;
266271 }
272+
267273 rc = mdb_txn_begin (lmdb_env -> env , NULL , 0 , & txn );
268274 if (rc ) {
269275 ctx -> set_error (ctx ,500 ,"lmdb failed to begin transaction for multiset in %s:%s" ,cache -> basedir ,mdb_strerror (rc ));
0 commit comments