Uploaded image for project: 'MariaDB Server'
  1. MariaDB Server
  2. MDEV-10357

my_context_continue() does not store current fiber on Windows

    XMLWordPrintable

Details

    Description

      This prevents context to be executed in a different thread from the one that issued
      my_context_spawn, seriously limiting "async" APIs.

      simple patch:

       
      diff --git a/mysys/my_context.c b/mysys/my_context.c
      index 5faa041..62fc05b 100644
      --- a/mysys/my_context.c
      +++ b/mysys/my_context.c
      @@ -696,30 +696,27 @@ my_context_destroy(struct my_context *c)
       int
       my_context_spawn(struct my_context *c, void (*f)(void *), void *d)
       {
      -  void *current_fiber;
         c->user_func= f;
         c->user_arg= d;
      +  return my_context_continue(c);
      +}
      +
      +int
      +my_context_continue(struct my_context *c)
      +{
         /*
           This seems to be a common trick to run ConvertThreadToFiber() only on the
           first occurence in a thread, in a way that works on multiple Windows
           versions.
         */
      -  current_fiber= GetCurrentFiber();
      +  void *current_fiber= GetCurrentFiber();
         if (current_fiber == NULL || current_fiber == (void *)0x1e00)
           current_fiber= ConvertThreadToFiber(c);
         c->app_fiber= current_fiber;
         DBUG_SWAP_CODE_STATE(&c->dbug_state);
         SwitchToFiber(c->lib_fiber);
         DBUG_SWAP_CODE_STATE(&c->dbug_state);
      -  return c->return_value;
      -}
       
      -int
      -my_context_continue(struct my_context *c)
      -{
      -  DBUG_SWAP_CODE_STATE(&c->dbug_state);
      -  SwitchToFiber(c->lib_fiber);
      -  DBUG_SWAP_CODE_STATE(&c->dbug_state);
         return c->return_value;
       }
      
      

      Attachments

        Activity

          People

            wlad Vladislav Vaintroub
            wlad Vladislav Vaintroub
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Git Integration

                Error rendering 'com.xiplink.jira.git.jira_git_plugin:git-issue-webpanel'. Please contact your Jira administrators.