src/dbfs/interrupt.c
changeset 41 6abda2fa4579
child 42 40a3b13ffc9d
equal deleted inserted replaced
40:03017f5f0087 41:6abda2fa4579
       
     1 
       
     2 #include "dbfs.h"
       
     3 
       
     4 void dbfs_interrupt_query (struct fuse_req *req, void *query_ptr) {
       
     5     struct evsql_query *query = query_ptr;
       
     6     err_t err;
       
     7 
       
     8     // abort
       
     9     evsql_query_abort(NULL, query);
       
    10 
       
    11     // error the req
       
    12     if ((err = -fuse_reply_err(req, EINTR)))
       
    13         PWARNING("fuse_reply_err", err);
       
    14 }
       
    15 
       
    16 void _dbfs_interrupt_ctx (struct fuse_req *req, void *ctx_ptr) {
       
    17     // dereference ctx
       
    18     struct dbfs_interrupt_ctx *ctx = ctx_ptr;
       
    19     
       
    20     // just cancel query if pending
       
    21     if (ctx->query) {
       
    22         evsql_query_abort(NULL, ctx->query);
       
    23         ctx->query = NULL;
       
    24     }
       
    25 
       
    26     // mark as interrupted
       
    27     ctx->interrupted = 1;
       
    28 }
       
    29 
       
    30 int dbfs_interrupt_register (struct fuse_req *req, struct dbfs_interrupt_ctx *ctx) {
       
    31     // initialize
       
    32     ctx->query = NULL;
       
    33     ctx->interrupted = 0;
       
    34 
       
    35     // just pass over to fuse_req_interrupt_func
       
    36     fuse_req_interrupt_func(req, _dbfs_interrupt_ctx, ctx);
       
    37 }