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

Re: libssh multi-threading issue


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.
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 issueDustin Oprea <myselfasunder@xxxxxxxxx>
References:
libssh multi-threading issueZhangAnne <meantobe997@xxxxxxxxxxx>
Re: libssh multi-threading issueMike Jones <mrjones@xxxxxxxxxx>
Re: libssh multi-threading issueAnne Zhang <meantobe997@xxxxxxxxxxx>
Archive administrator: postmaster@lists.cynapses.org