summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@aleksander.es>2014-10-09 12:27:43 +0200
committerAleksander Morgado <aleksander@aleksander.es>2014-10-13 15:43:51 +0200
commit93a188eb81d37720901a32c4d6ce1830b367109a (patch)
treeed1f1f36d6f8a665779a6739b766cab651f5c47c
parent7134a910b98305330331edad815a6593a74f5247 (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.c16
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);