users-prolog
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Is the Prolog runtime re-entrantable in Prolog --> C --> Prolog proc


From: Shuai Wang
Subject: Re: Is the Prolog runtime re-entrantable in Prolog --> C --> Prolog procedure?
Date: Wed, 13 Aug 2014 11:06:23 -0400

Hello Dr. Diaz,

Yes, I simplified the case I attached before. 

Generally there are two functions in prolog, foo and foo1. 

In the main function of Simple.c, prolog's function foo is called (through foo's wrapper). 

Then in prolog foo, foo1's C wrapper is called. This wrapper would call foo1's 
implementation inside prolog .

The problem is that there is a reentrancy from C to Prolog here 
" foo C wrapper --> foo " and " foo1 C wrapper --> foo1".

and the problem is that 
when execution flow return back to foo, the TMP variable can not be binded (line 6 in babel.pl).

I have tested other cases, and similar issues happened.

Am I clear enough?

Thank you a lot!

Best,
Shuai



On Wed, Aug 13, 2014 at 3:24 AM, Daniel Diaz <address@hidden> wrote:
Hi,

sorry for the late reply. There are possibly reentrancy issues with gprolog. However, your example is too complex as is to be used for debugging purpose. Could you minimize it as most as possible so I could try to understand what happens ?

Thank you

Daniel


Le 24 juil. 2014 à 20:24, Shuai Wang <address@hidden> a écrit :

Hello prolog users,


I just asked a question in this email list about 
"why failed in process of Prolog call C call Prolog"

Now after several test, I have a more general question which confused 
me...

I myself have some experience about using C call Prolog and 
using Prolog to call C in GNU-Prolog, however, I have several 
strange problems in recent test of procedure below:

     C -- call -- > Prolog -- call --> C -- call --> Prolog 
     -- return --> C -- return --> Prolog (fail..)

So basically, is the Prolog runtime reentrantable in Prolog --> C --> Prolog
procedure..?


I attached my test code in the email, in this code, the weird thing is that return value of TMP  in  Prolog function foo  can not be binded.

BTW:  Is it something related to the arguments of 
Pl_Query_Begin; Pl_Query_End ?


Best,
Shuai


--
Ce message a été vérifié par MailScanner pour des virus ou des polluriels et rien de suspect n'a été trouvé. <simple.cil.c><babel.c><babel.pl><Makefile>_______________________________________________
Users-prolog mailing list
address@hidden
https://lists.gnu.org/mailman/listinfo/users-prolog


--
Ce message a été vérifié par MailScanner pour des virus ou des polluriels et rien de suspect n'a été trouvé.

Attachment: babel.pl
Description: Text Data

Attachment: babel.c
Description: Text Data

Attachment: Makefile
Description: Binary data

Attachment: simple.c
Description: Text Data


reply via email to

[Prev in Thread] Current Thread [Next in Thread]