core: Iterate over completed transfers using the correct list node

Commit 006ca0fbaa ("Guard against getting stuck while handling events")
caused a regression using the wrong list node when iterating a list. Fix
this by introducing and using an alternate for_each iterator.

Closes #796

Signed-off-by: Chris Dickens <christopher.a.dickens@gmail.com>
diff --git a/libusb/io.c b/libusb/io.c
index bf6876e..0e960dd 100644
--- a/libusb/io.c
+++ b/libusb/io.c
@@ -2112,7 +2112,7 @@
 		list_cut(&completed_transfers, &ctx->completed_transfers);
 		usbi_mutex_unlock(&ctx->event_data_lock);
 
-		__for_each_transfer_safe(&completed_transfers, itransfer, tmp) {
+		__for_each_completed_transfer_safe(&completed_transfers, itransfer, tmp) {
 			list_del(&itransfer->completed_list);
 			r = usbi_backend.handle_transfer_completion(itransfer);
 			if (r) {
diff --git a/libusb/libusbi.h b/libusb/libusbi.h
index 8dce535..1249983 100644
--- a/libusb/libusbi.h
+++ b/libusb/libusbi.h
@@ -1363,6 +1363,9 @@
 #define for_each_transfer_safe(ctx, t, n) \
 	__for_each_transfer_safe(&(ctx)->flying_transfers, t, n)
 
+#define __for_each_completed_transfer_safe(list, t, n) \
+	list_for_each_entry_safe(t, n, (list), completed_list, struct usbi_transfer)
+
 #define for_each_event_source(ctx, e) \
 	for_each_helper(e, &(ctx)->event_sources, struct usbi_event_source)
 
diff --git a/libusb/version_nano.h b/libusb/version_nano.h
index 4a87c44..f4b4f9f 100644
--- a/libusb/version_nano.h
+++ b/libusb/version_nano.h
@@ -1 +1 @@
-#define LIBUSB_NANO 11567
+#define LIBUSB_NANO 11568