Em Qua, 2009-05-06 às 09:26 +0200, Daniel Veillard escreveu: > On Mon, May 04, 2009 at 05:50:03PM -0300, Eduardo Otubo wrote: > > Hello DV, > > Hi Eduardo, > > sorry for the delay I took a few days of vacations :-) Hello DV, Nice! Hope you enjoyed your vacations :) > > > > + while (channel && channel_is_open(channel)) { > > > > + ret = channel_read(channel, readbuf, 0, 0); > > > > + if (ret < 0) { > > > > + (*exit_status) = SSH_CHANNEL_READ_ERR; > > > > + break; > > > > + } > > > > + > > > > + if (ret == 0) { > > > > + channel_send_eof(channel); > > > > + while(channel_get_exit_status(channel) == -1){ > > > > + channel_poll(channel,0); > > > > + usleep(50); > > > > + } > > > > > > It's always a bit nasty to sleep like that. Is there really now way > > > to use something like poll or select instead ? In average you're gonna > > > be waken up multiple time while waiting for your answer while the kernel > > > could instead wake you up exactly when you have the data. > > > > This was a libssh issue This was the only way I could make it work. But > > now the libssh is fixed and this function is a little different - > > http://pastebin.com/fbf84426 > > Looks fine now, but how can you make sure libssh used will have the > fix, is there a new version released and the associated test in > configure.in ? In fact I am part of the libssh team, I help them with testing. And yes, we're planning to release a new version of libssh this week with all these fixes. But I still need to make it sure in configure.in. I'll do it right now. > > > > > + > > > > +/* return the lpar_id given a name and a managed system name */ > > > > +static int > > > > +phypGetLparID(SSH_SESSION * ssh_session, const char *managed_system, > > > > + const char *name) > > > > +{ > > > > + int exit_status = 0; > > > > + virBuffer cmd = VIR_BUFFER_INITIALIZER; > > > > + > > > > + virBufferVSprintf(&cmd, > > > > + "lssyscfg -r lpar -m %s --filter lpar_names=%s -F lpar_id", > > > > + managed_system, name); > > > > + const char *tex_ret = > > > > + __inner_exec_command(ssh_session, virBufferContentAndReset(&cmd), > > > > + &exit_status); > > > > + > > > > + virBufferContentAndReset(&cmd); > > > > > > Huh ? you're supposed to get the resulting char *, and then free it > > > later once you're done with the data. Here youre just leaking memory > > > I'm afraid > > > > > > same thing for most of the commands in that file. > > > > Here, I just would like to free the Buffer, and this was the best way I > > find since I couldn't find any better function to manipulate this. How > > do I simply free a buffer using the internal virBuffer* API? > > Well you didn't allocate the buffer structure since it's on the heap > and initilized with the VIR_BUFFER_INITIALIZER macro. So technically > you don't need to free it, but you need to free the string in the > buffer. That string is returned by virBufferContentAndReset(), so you > need to save that to a local variable and free it once done. All right, got it. Thanks for the tips :) []'s -- Eduardo Otubo Software Engineer Linux Technology Center IBM Systems & Technology Group Mobile: +55 19 8135 0885 otubo@xxxxxxxxxxxxxxxxxx -- Libvir-list mailing list Libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list