@@ -176,12 +176,10 @@ pub extern "C" fn ExecNow(
176176 key_type,
177177 ) ) ,
178178 Ok ( dbkey) => {
179+ dbkey. loop_data . set_rc ( Context :: no_client ( ) ) ;
179180 let ( mut result, context) = {
180181 let db = dbkey. loop_data . get_db ( ) ;
181- let redis_context =
182- dbkey. loop_data . set_rc ( context) ;
183182 let result = do_execute ( & db, args[ 2 ] ) ;
184- let context = redis_context. release ( ) ;
185183 let t = std:: time:: Instant :: now ( )
186184 + std:: time:: Duration :: from_secs ( 10 ) ;
187185 let result = match result {
@@ -242,11 +240,9 @@ pub extern "C" fn QueryNow(
242240 ) ) ,
243241 Ok ( dbkey) => {
244242 let db = dbkey. loop_data . get_db ( ) ;
243+ dbkey. loop_data . set_rc ( Context :: no_client ( ) ) ;
245244 let ( mut result, context) = {
246- let redis_context =
247- dbkey. loop_data . set_rc ( context) ;
248245 let result = do_query ( & db, args[ 2 ] ) ;
249- let context = redis_context. release ( ) ;
250246 let t = std:: time:: Instant :: now ( )
251247 + std:: time:: Duration :: from_secs ( 10 ) ;
252248 let result = match result {
@@ -303,11 +299,9 @@ pub extern "C" fn QueryNowInto(
303299 ) ) ,
304300 Ok ( dbkey) => {
305301 let db = dbkey. loop_data . get_db ( ) ;
302+ dbkey. loop_data . set_rc ( Context :: no_client ( ) ) ;
306303 let ( mut result, context) = {
307- let redis_context =
308- dbkey. loop_data . set_rc ( context) ;
309304 let result = do_query ( & db, args[ 3 ] ) ;
310- let context = redis_context. release ( ) ;
311305 let return_method =
312306 ReturnMethod :: Stream { name : args[ 1 ] } ;
313307 let t = std:: time:: Instant :: now ( )
@@ -362,27 +356,30 @@ pub extern "C" fn ExecStatementNow(
362356 key_type,
363357 ) ,
364358 Ok ( dbkey) => {
365- let ( result, context) = {
366- let redis_context =
367- dbkey. loop_data . set_rc ( context) ;
359+ let result = {
360+ // rc must be
361+ // 1. Define
362+ // 2. Dropped before we forget the db key
363+ let _rc = dbkey
364+ . loop_data
365+ . set_rc ( Context :: no_client ( ) ) ;
368366 let result = dbkey
369367 . loop_data
370368 . get_replication_book ( )
371369 . exec_statement (
372370 argvector[ 2 ] ,
373371 & argvector[ 3 ..] ,
374372 ) ;
375- let context = redis_context. release ( ) ;
376- ( result, context)
373+ match result {
374+ Ok ( mut res) => {
375+ ReplicateVerbatim ( & context) ;
376+ res. reply ( & context)
377+ }
378+ Err ( mut err) => err. reply ( & context) ,
379+ }
377380 } ;
378381 mem:: forget ( dbkey) ;
379- match result {
380- Ok ( mut res) => {
381- ReplicateVerbatim ( & context) ;
382- res. reply ( & context)
383- }
384- Err ( mut err) => err. reply ( & context) ,
385- }
382+ result
386383 }
387384 }
388385 }
@@ -561,17 +558,15 @@ pub extern "C" fn QueryStatementNow(
561558 key_type,
562559 ) ,
563560 Ok ( dbkey) => {
561+ dbkey. loop_data . set_rc ( Context :: no_client ( ) ) ;
564562 let ( result, context) = {
565- let redis_context =
566- & dbkey. loop_data . set_rc ( context) ;
567563 let result = dbkey
568564 . loop_data
569565 . get_replication_book ( )
570566 . query_statement (
571567 argvector[ 2 ] ,
572568 & argvector[ 3 ..] ,
573569 ) ;
574- let context = redis_context. release ( ) ;
575570 ( result, context)
576571 } ;
577572 mem:: forget ( dbkey) ;
@@ -618,14 +613,12 @@ pub extern "C" fn QueryStatementNowInto(
618613 key_type,
619614 ) ) ,
620615 Ok ( dbkey) => {
616+ dbkey. loop_data . set_rc ( Context :: no_client ( ) ) ;
621617 let ( result, context) = {
622- let redis_context =
623- dbkey. loop_data . set_rc ( context) ;
624618 let result = dbkey
625619 . loop_data
626620 . get_replication_book ( )
627621 . query_statement ( args[ 3 ] , & args[ 4 ..] ) ;
628- let context = redis_context. release ( ) ;
629622 ( result, context)
630623 } ;
631624 mem:: forget ( dbkey) ;
0 commit comments