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 <mrjo...@hiwaay.net > <mailto:mrjo...@hiwaay.net>> 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 > > > >