port-probe: fix crash in buffer-full processing

Signal was attached with user_data as MMPortProbe*, but
serial_buffer_full() treated user_data as a PortProbeRunTask*.
Hillarity ensued.
This commit is contained in:
Dan Williams
2012-11-26 16:49:39 -06:00
parent 6106d1d6a2
commit a7167b93b9

View File

@@ -880,7 +880,7 @@ static const guint8 zerobuf[32] = {
static void static void
serial_buffer_full (MMSerialPort *serial, serial_buffer_full (MMSerialPort *serial,
GByteArray *buffer, GByteArray *buffer,
PortProbeRunTask *task) MMPortProbe *self)
{ {
const gchar **iter; const gchar **iter;
size_t iter_len; size_t iter_len;
@@ -892,7 +892,11 @@ serial_buffer_full (MMSerialPort *serial,
if ( (buffer->len >= sizeof (zerobuf)) if ( (buffer->len >= sizeof (zerobuf))
&& (memcmp (buffer->data, zerobuf, sizeof (zerobuf)) == 0)) { && (memcmp (buffer->data, zerobuf, sizeof (zerobuf)) == 0)) {
mm_serial_port_close (serial); mm_serial_port_close (serial);
port_probe_run_task_complete (task, FALSE, NULL); port_probe_run_task_complete (self->priv->task,
FALSE,
g_error_new_literal (MM_CORE_ERROR,
MM_CORE_ERROR_FAILED,
"Probing stopped due to non-AT response"));
return; return;
} }
@@ -913,7 +917,11 @@ serial_buffer_full (MMSerialPort *serial,
if (!memcmp (&buffer->data[i], *iter, iter_len)) { if (!memcmp (&buffer->data[i], *iter, iter_len)) {
/* Immediately close the port and complete probing */ /* Immediately close the port and complete probing */
mm_serial_port_close (serial); mm_serial_port_close (serial);
port_probe_run_task_complete (task, FALSE, NULL); port_probe_run_task_complete (self->priv->task,
FALSE,
g_error_new_literal (MM_CORE_ERROR,
MM_CORE_ERROR_FAILED,
"Probing stopped due to non-AT response"));
return; return;
} }
} }