Hi,
Thanks for testing the usb code, and many thanks for the 2 bug reports!
I just send a patch for the first issue (segfault when compiled with
--disable-smartcard)
to the list. I'll push that to the official repo as soon as I get an ack for it.
The second issue (infinite recursion in usbredir) has been fixed in my
usbredir repository.
Regards,
Hans
On 09/29/2011 03:26 AM, coolper chen wrote:
hi,
I'm testing spice usb redirection,it works great,and it's better than usbip,
thanks.
I got 1 bug about spice-gtk,if I compile spice-gtk with --disable-smartcard,usb
redir will cause segment fault;the bug is here:
generated_demarshallers.c:
spice_parse_channel_func_t spice_get_server_channel_parser(uint32_t channel,
unsigned int *max_message_type)
{
static struct {spice_parse_channel_func_t func; unsigned int max_messages; }
channels[10] = {
{ NULL, 0 },
{ parse_MainChannel_msg, 111},
{ parse_DisplayChannel_msg, 315},
{ parse_InputsChannel_msg, 111},
{ parse_CursorChannel_msg, 108},
{ parse_PlaybackChannel_msg, 106},
{ parse_RecordChannel_msg, 104},
{ parse_TunnelChannel_msg, 108},
#ifdef USE_SMARTCARD
{ parse_SmartcardChannel_msg, 101},
#endif /* USE_SMARTCARD */
{ parse_UsbredirChannel_msg, 101}
};
if (channel < 10) {
if (max_message_type != NULL) {
*max_message_type = channels[channel].max_messages;
}
return channels[channel].func;
}
return NULL;
}
when not define USE_SMARTCARD,the cannels[10] array is wrong about usbredir
channel, it may fix with:
#ifdef USE_SMARTCARD
{ parse_SmartcardChannel_msg, 101},
#else
{NULL, 0},
#endif /* USE_SMARTCARD */
I got 1 bug about usbredir lib when I test a usb device which has two
functions(headphone and microphone);the bug is here:
usbredirhost.c:
static int usbredirhost_cancel_iso_stream(struct usbredirhost *host,
uint8_t ep, int do_free)
{
LOCK(host);
return usbredirhost_cancel_iso_stream(host, ep, do_free);
UNLOCK(host);
}
the function is infinite recursive call;I guess it call the wrong function, so
I changed to:
static int usbredirhost_cancel_iso_stream(struct usbredirhost *host,
uint8_t ep, int do_free)
{
LOCK(host);
return usbredirhost_cancel_iso_stream_unlocked(host, ep, do_free);
UNLOCK(host);
}
Then,it works perfect.
Coolper Chen
_______________________________________________
Spice-devel mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/spice-devel
_______________________________________________
Spice-devel mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/spice-devel