On 10/01/2019 18:09, Ananthu Unnikrishnan wrote:
> Hi Matt,
> 
>         Thanks a lot for the reply.
> 
>        After calling ASYNC_pause_job() from the engine, control will transfer 
> to
> the place where we start the ASYNC_start_job right? So how can we write the 
> code
> to put a trigger on fd in the same thread?

I'm not saying you can't use threads to do this - only that you need to be
careful about using them and must obey the rules.


> If I am wrong  please correct me.
> Also if u can suggest where resume operation should be done, it would be 
> helpful.

Typically the calling application will wait on the fd (e.g. using "select" or
similar) until it is readable. Once it sees the fd as readable then it calls
ASYNC_start_job() again.


As an aside you may also be interested in this PR that is currently being 
reviewed:

https://github.com/openssl/openssl/pull/7573

This adds an alternative mechanism for signalling other than using fds (i.e. to
use a callback instead) and will be available in OpenSSL 3.0 when it gets 
released.

Matt



> 
> On Thu, Jan 10, 2019 at 10:11 PM Matt Caswell <m...@openssl.org
> <mailto:m...@openssl.org>> wrote:
> 
> 
> 
>     On 10/01/2019 09:39, Ananthu Unnikrishnan wrote:
>     > Hi all,
>     >
>     >         We are not able to access the waitctx address from the job 
> address
>     using
>     > ASYNC_get_wait_ctx(job) from a thread which starts in the bind section 
> of the
>     > dynamic engine. The job address is the same as that we got
>     > using ASYNC_get_current_job.  Can anyone help on this?
> 
>     It's very unclear from the your various emails what you are trying to 
> achieve
>     and the problem that you are experiencing.
> 
>     From the above it sounds like you are starting threads from inside your 
> dynamic
>     engine? ASYNC_JOBs are always local to a thread. When a job is started it 
> is
>     associated with the current thread. So ASYNC_get_current_job() returns 
> the job
>     associated with the current thread. Similarly if you pause a job,
>     ASYNC_pause_job() must be called from that same thread. Finally if you 
> restart a
>     paused job it must also be restarted on the same thread.
> 
>     If you are starting new threads from within your engine then extreme care 
> must
>     be taken to obey the above rules - otherwise you are likely to get strange
>     results.
> 
>     Matt
> 
> 
>     >
>     >          
>     >
>     > On Tue, Jan 8, 2019 at 11:26 AM Ananthu Unnikrishnan
>     <ananthuu...@gmail.com <mailto:ananthuu...@gmail.com>
>     > <mailto:ananthuu...@gmail.com <mailto:ananthuu...@gmail.com>>> wrote:
>     >
>     >     Can anyone please help on this? If u need any additional information
>     please
>     >     let me know.
>     >
>     >     On Mon, Jan 7, 2019 at 6:25 PM Ananthu Unnikrishnan
>     <ananthuu...@gmail.com <mailto:ananthuu...@gmail.com>
>     >     <mailto:ananthuu...@gmail.com <mailto:ananthuu...@gmail.com>>> 
> wrote:
>     >
>     >         Hi all,
>     >
>     >         Adding more details to the previous mail. We have edited the 
> OpenSSL
>     >         code for implementing the polling for changed fd's as in 
> OpenSSL speed
>     >         command. Attached the code snippet of the same along with this 
> mail.
>     >         Mentioned below some observations which found doubtful:
>     >
>     >         1) We have got prints in ASYNC_FINISH case, before getting 
> print in
>     >         ASYNC_PAUSE case. Attaching the log also, so you can understand
>     easily. 
>     >         2) Shown below the code snippet which we have written to 
> provide a
>     write
>     >         on fd.
>     >
>     >         if ((waitctx = ASYNC_get_wait_ctx((ASYNC_JOB *)job)) == NULL) {
>     >                 printf("In dynamic engine | waitctx == NULL : %d\n",
>     __LINE__);
>     >                 return ret;
>     >             }
>     >
>     >             printf("\n----- In dynamic engine | After pausing | job is 
> %lx | 
>     >         waitctx in resume job %lx |-----\n", job, waitctx);
>     >
>     >                 if ((ret = ASYNC_WAIT_CTX_get_fd(waitctx, engine_id, 
> &efd,
>     >                                       &custom)) > 0) {
>     >                 if (write(efd, &buf, sizeof(uint64_t)) == -1) {
>     >                     printf("\nFailed to write\n");
>     >                 }
>     >             }
>     >
>     >         Here waitctx is getting NULL when we tried to fetch waitctx 
> using
>     >         ASYNC_get_wait_ctx(). We have printed data of sizeof(ASYNC_JOB)
>     ie.1176
>     >         bytes contained in the job address from the engine,  we got
>     correct data
>     >         before calling ASYNC_pause() and but got half data zero data 
> when we
>     >         tried to access the same address after ASYNC_pause(). 
>     >
>     >         Attaching both job structure contents before and after calling
>     >         ASYNC_pause(). Also, we got the correct data in the same address
>     when we
>     >         have printed from ssl_start_async_job() before polling starts,
>     where we
>     >         have started the async_job
>     >         . 
>     >         The prints starting with "In dynamic engine" are prints inside 
> the
>     >         engine, rest prints are from ss/ssl_lib.c. Kindly check this and
>     please
>     >         point out if anything is wrong somewhere. Thanks in advance.
>     >
>     >
>     >         On Sun, Jan 6, 2019 at 10:30 AM Ananthu Unnikrishnan
>     >         <ananthuu...@gmail.com <mailto:ananthuu...@gmail.com>
>     <mailto:ananthuu...@gmail.com <mailto:ananthuu...@gmail.com>>> wrote:
>     >
>     >             Hi all,
>     >
>     >                    We have implemented a dynamic engine and tested in 
> the
>     async
>     >             mode using OpenSSL speed command. But in a real network
>     scenario, we
>     >             have seen only starting the async_job(in file ssl/ssl_lib.c,
>     >             function: ssl_start_async_job) in the OpenSSL. We haven't 
> seen
>     >             polling async_fd's for resuming the job as in 
> apps/speed.c(in
>     speed
>     >             command case).
>     >                     So can anyone please suggest any solution for 
> resuming the
>     >             async_jobs in real network scenario? Thanks in advance.
>     >
>     >
>     >
>     >
>     >
>     >         --
>     >         With best Regards, 
>     >
>     >                  Ananthu
>     >
>     >
>     >
>     >
>     >     --
>     >     With best Regards, 
>     >
>     >              Ananthu
>     >
>     >
>     >
>     >
>     > --
>     > With best Regards, 
>     >
>     >          Ananthu
>     >
>     >
>     >
>     -- 
>     openssl-users mailing list
>     To unsubscribe: https://mta.openssl.org/mailman/listinfo/openssl-users
> 
> 
> 
> -- 
> With best Regards, 
> 
>          Ananthu
> 
> 
> 
-- 
openssl-users mailing list
To unsubscribe: https://mta.openssl.org/mailman/listinfo/openssl-users

Reply via email to