Skip navigation
Currently Being Moderated

Yielding is not allowed within a C or metamethod call

Apr 27, 2012 5:32 PM

The way I'm developing my plug in is that I'm creating individual modules, testing those modules and then integrating the modules into my plugin. The individual modules work. However, I have a problem when I try to integrate.

 

I'm using an anonymous function to call a function when a user presses a button. That function calls another lua file (is that a module?) If I place the require statement at the top of the file I receive the Yielding is not allowed within a C or metamethod call error.

 

However, if I place the require statement within the function that specifically requires accessing the lua file then I don't receive the error. Clearly, I don't understand what's going on. Can anyone explain what is happening here?

 

Thanks!

 
Replies
  • Currently Being Moderated
    Apr 27, 2012 7:16 PM   in reply to optimator999

    Does your module have executable code in the body of it? If so, consider putting it in a function, then call the function when you are ready, so nothing gets executed when the module is "require'd".

     
    |
    Mark as:
  • Currently Being Moderated
    Apr 27, 2012 8:50 PM   in reply to optimator999

    try:

     

    action = function( button )

         -- start task

    end

     

    instead of:

     

    action = "call a function that starts a task"

     

    In the first case, you are assigning a function value to action which will get called when the user clicks the button.

    In the second case, you are calling a function and assigning the return value to action.

     

    eh?

     

    R

     
    |
    Mark as:
  • Currently Being Moderated
    Apr 27, 2012 9:49 PM   in reply to optimator999

    The problem is when I call the LrHttp.post function. That's when the yield error is being thrown.

    The error message "Yielding is not allowed within a C or metamethod call" arises when you call a function or method that needs to be invoked from a task created by LrTasks or LrFunctionContext.postAsyncTaskWithContext.

     

    In this case, the LrHttp functions have to be called from a task.  The SDK documentation is pretty good (but not perfect) about calling out which functions and methods have to be called from a task. 

     
    |
    Mark as:

More Like This

  • Retrieving data ...

Bookmarked By (0)

Answers + Points = Status

  • 10 points awarded for Correct Answers
  • 5 points awarded for Helpful Answers
  • 10,000+ points
  • 1,001-10,000 points
  • 501-1,000 points
  • 5-500 points