On Mon, Feb 24, 2020 at 12:51:54PM +0100, Philippe Mathieu-Daudé wrote: > On 2/24/20 11:34 AM, Stefan Hajnoczi wrote: > > @@ -304,8 +310,10 @@ struct { > > \ > > } while (/*CONSTCOND*/0) > > #define QSIMPLEQ_REMOVE_HEAD(head, field) do { \ > > - if (((head)->sqh_first = (head)->sqh_first->field.sqe_next) == NULL)\ > > + typeof((head)->sqh_first) elm = (head)->sqh_first; \ > > + if (((head)->sqh_first = elm->field.sqe_next) == NULL) \ > > (head)->sqh_last = &(head)->sqh_first; \ > > Here you check elm for NULL ... > > > + elm->field.sqe_next = NULL; \ > > ... then you assign it.
The sqe_next field is copied into the head. If this was the last element in the list then the head's sqh_last needs to be fixed up. Finally we clear the linked list sqe_next pointer inside the element itself (which is no longer in the list). Is there an issue? Stefan
signature.asc
Description: PGP signature