diff options
| author | Aleksander Morgado <aleksander@aleksander.es> | 2014-10-09 12:27:43 +0200 |
|---|---|---|
| committer | Aleksander Morgado <aleksander@aleksander.es> | 2014-10-13 15:43:51 +0200 |
| commit | 93a188eb81d37720901a32c4d6ce1830b367109a (patch) | |
| tree | ed1f1f36d6f8a665779a6739b766cab651f5c47c | |
| parent | 7134a910b98305330331edad815a6593a74f5247 (diff) | |
libqmi-glib,message: avoid g_byte_array_new_take()
It will break our unit tests, which are all executed with gc-friendly. See:
https://bugzilla.gnome.org/show_bug.cgi?id=738170
| -rw-r--r-- | src/libqmi-glib/qmi-message.c | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/src/libqmi-glib/qmi-message.c b/src/libqmi-glib/qmi-message.c index 8e0635a..ad3ad50 100644 --- a/src/libqmi-glib/qmi-message.c +++ b/src/libqmi-glib/qmi-message.c @@ -501,8 +501,19 @@ qmi_message_new (QmiService service, buffer_len = (1 + sizeof (struct qmux) + (service == QMI_SERVICE_CTL ? sizeof (struct control_header) : sizeof (struct service_header))); - buffer = g_malloc (buffer_len); + /* NOTE: + * Don't use g_byte_array_new_take() along with g_byte_array_set_size()! + * Not yet, at least, see: + * https://bugzilla.gnome.org/show_bug.cgi?id=738170 + */ + + /* Create the GByteArray with buffer_len bytes preallocated */ + self = g_byte_array_sized_new (buffer_len); + /* Actually flag as all the buffer_len bytes being used. */ + g_byte_array_set_size (self, buffer_len); + + buffer = (struct full_message *)(self->data); buffer->marker = QMI_MESSAGE_QMUX_MARKER; buffer->qmux.flags = 0; buffer->qmux.service = service; @@ -518,9 +529,6 @@ qmi_message_new (QmiService service, buffer->qmi.service.header.message = GUINT16_TO_LE (message_id); } - /* Create the GByteArray */ - self = g_byte_array_new_take ((guint8 *)buffer, buffer_len); - /* Update length fields. */ set_qmux_length (self, buffer_len - 1); /* QMUX marker not included in length */ set_all_tlvs_length (self, 0); |
