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

Re: libssh multi-threading issue


Any tips on how to get this working on windows? It will be very helpful.

Thanks,

Anne


On Wed, Apr 16, 2014 at 6:58 PM, Anne Zhang <meantobe997@xxxxxxxxxxx> wrote:

> Hi Aris,
>
> Thanks so much for the reply. It works in my Linux environment! I tried:
>
>         static int initialized=0;
> static pthread_mutex_t mutex1 = PTHREAD_MUTEX_INITIALIZER;
>  pthread_mutex_lock(&mutex1);
> if (!initialized){
> ssh_threads_set_callbacks(ssh_threads_get_pthread());
>  ssh_init();
>    initialized = 1;
> }
> pthread_mutex_unlock( &mutex1 );
>
> So is there a similar mechanism in Windows? I noticed there is a
> libssh_threads.so in libssh for linux but not for window.
>
>  What do I pass in ssh_threads_set_callbacks() for windows? Is there
> anything i should notice for the build of libssh under windows?
>
>
> On Wed, Apr 16, 2014 at 11:43 AM, Dustin Oprea <myselfasunder@xxxxxxxxx>wrote:
>
>> On Wed, Apr 16, 2014 at 2:26 PM, Aris Adamantiadis <aris@xxxxxxxxxxxx>wrote:
>>
>>> Hi Anne,
>>>
>>> There's an easy solution: before every ssh_connect, put an
>>> initialization procedure protected by a mutex. This is not optimal
>>> (because every new connection will have to lock+unlock a mutex) but you
>>> are guaranteed that ssh_init gets called only once.
>>>
>>
>> I like it. That's a cute solution for her requirements, Aris.
>>
>>
>>
>> Dustin
>>
>>
>>> Pseudocode:
>>>
>>> do_my_connect(){
>>> static int initialized=0;
>>> static mutex init_mutex;
>>>
>>> mutex_lock(&init_mutex);
>>> if (!initialized){
>>>   initialize_threading();
>>>   initialized = 1;
>>> }
>>> mutex_unlock(&init_mutex);
>>>
>>>
>>> Regards,
>>>
>>> Aris
>>>
>>> Le 16/04/14 17:53, Anne Zhang a écrit :
>>> > Hi Mike,
>>> >
>>> > Thanks for the reply. Unfortunately, I am only implementing an .so
>>> > file and have no access to the main program. I understand ssh_init()
>>> > would solve the problem but my library is being called within a thread
>>> > and I cannot change what's in the main/original thread.
>>> >
>>> > Look forward to additional input.
>>> >
>>> > Thanks,
>>> >
>>> > Anne
>>> >
>>> >
>>> > On Wed, Apr 16, 2014 at 2:53 AM, Mike Jones <mrjones@xxxxxxxxxx
>>> > <mailto:mrjones@xxxxxxxxxx>> wrote:
>>> >
>>> >     On 4/16/2014 1:51 AM, ZhangAnne wrote:
>>> >>     Hi,
>>> >>
>>> >>     I am implementing a shared library, and met the threading issue
>>> >>     when the program calls my library and executes multiple threads
>>> >>     in parallel. Since my lib is being called by other program, I
>>> >>     cannot initialize the threading outside of any threading context
>>> >>     as mentioned
>>> >>     here: http://api.libssh.org/master/libssh_tutor_threads.html
>>> >>
>>> >>     My control to the code is limited within the scope of my library.
>>> >>     I am wondering if there is any workaround other than changing
>>> >>     code ouside my library?
>>> >>
>>> >>     Thanks,
>>> >>
>>> >>     Anne
>>> >
>>> >     If it helps, I used libssh in a multi-threaded application without
>>> >     calling ssh_threads_set_callbacks() or linking libssh_threads.
>>> >     In fact, I never even read this part of the libssh documentation
>>> >     before today. :)
>>> >
>>> >     The main/original thread of the application calls ssh_init() and
>>> >     then spawns off one additional thread that makes all the other
>>> >     libssh calls.
>>> >     The freeing of resources and ssh_finalize() are done back in the
>>> >     original thread after this other thread has finished.
>>> >
>>> >     So far there have been no issues that I can attribute to using it
>>> >     this way.
>>> >
>>> >     We're running on Linux (RedHat 6.x) and using libpthread.
>>> >
>>> >     - Mike
>>> >
>>> >
>>> >
>>> >
>>>
>>>
>>>
>>
>

Follow-Ups:
Re: libssh multi-threading issueAris Adamantiadis <aris@xxxxxxxxxxxx>
References:
libssh multi-threading issueZhangAnne <meantobe997@xxxxxxxxxxx>
Re: libssh multi-threading issueMike Jones <mrjones@xxxxxxxxxx>
Re: libssh multi-threading issueAnne Zhang <meantobe997@xxxxxxxxxxx>
Re: libssh multi-threading issueAris Adamantiadis <aris@xxxxxxxxxxxx>
Re: libssh multi-threading issueDustin Oprea <myselfasunder@xxxxxxxxx>
Re: libssh multi-threading issueAnne Zhang <meantobe997@xxxxxxxxxxx>
Archive administrator: postmaster@lists.cynapses.org