[vlc-devel] [PATCH 1/5] sap: use vlc_list for SAP addresses
RĂ©mi Denis-Courmont
remi at remlab.net
Sun Feb 9 14:33:09 CET 2020
---
src/stream_output/sap.c | 37 ++++++++++++++++---------------------
1 file changed, 16 insertions(+), 21 deletions(-)
diff --git a/src/stream_output/sap.c b/src/stream_output/sap.c
index 8e0a29dbec..09c8f9e469 100644
--- a/src/stream_output/sap.c
+++ b/src/stream_output/sap.c
@@ -55,7 +55,7 @@ struct session_descriptor_t
* control flow algorithm */
typedef struct sap_address_t
{
- struct sap_address_t *next;
+ struct vlc_list node;
vlc_thread_t thread;
vlc_mutex_t lock;
@@ -71,7 +71,7 @@ typedef struct sap_address_t
session_descriptor_t *first;
} sap_address_t;
-static sap_address_t *sap_addrs = NULL;
+static struct vlc_list sap_addrs = VLC_LIST_INITIALIZER(&sap_addrs);
static vlc_mutex_t sap_mutex = VLC_STATIC_MUTEX;
#define SAP_MAX_BUFFER 65534
@@ -278,21 +278,18 @@ sout_AnnounceRegisterSDP (vlc_object_t *obj, const char *sdp,
msg_Dbg (obj, "using SAP address: %s", psz_addr);
vlc_mutex_lock (&sap_mutex);
- for (sap_addr = sap_addrs; sap_addr; sap_addr = sap_addr->next)
+ vlc_list_foreach (sap_addr, &sap_addrs, node)
if (!strcmp (psz_addr, sap_addr->group))
- break;
+ goto matched;
+ sap_addr = AddressCreate (obj, psz_addr);
if (sap_addr == NULL)
{
- sap_addr = AddressCreate (obj, psz_addr);
- if (sap_addr == NULL)
- {
- vlc_mutex_unlock (&sap_mutex);
- return NULL;
- }
- sap_addr->next = sap_addrs;
- sap_addrs = sap_addr;
+ vlc_mutex_unlock(&sap_mutex);
+ return NULL;
}
+matched:
+ vlc_list_append(&sap_addr->node, &sap_addrs);
/* Switch locks.
* NEVER take the global SAP lock when holding a SAP thread lock! */
vlc_mutex_lock (&sap_addr->lock);
@@ -372,17 +369,14 @@ out:
*/
void sout_AnnounceUnRegister (vlc_object_t *obj, session_descriptor_t *session)
{
- sap_address_t *addr, **paddr;
- session_descriptor_t **psession;
+ sap_address_t *addr;
+ session_descriptor_t **psession = NULL;
msg_Dbg (obj, "removing SAP session");
vlc_mutex_lock (&sap_mutex);
- paddr = &sap_addrs;
- for (;;)
- {
- addr = *paddr;
- assert (addr != NULL);
+ vlc_list_foreach (addr, &sap_addrs, node)
+ {
psession = &addr->first;
vlc_mutex_lock (&addr->lock);
while (*psession != NULL)
@@ -392,15 +386,16 @@ void sout_AnnounceUnRegister (vlc_object_t *obj, session_descriptor_t *session)
psession = &(*psession)->next;
}
vlc_mutex_unlock (&addr->lock);
- paddr = &addr->next;
}
+ vlc_assert_unreachable();
+
found:
*psession = session->next;
if (addr->first == NULL)
/* Last session for this address -> unlink the address */
- *paddr = addr->next;
+ vlc_list_remove(&addr->node);
vlc_mutex_unlock (&sap_mutex);
if (addr->first == NULL)
--
2.25.0
More information about the vlc-devel
mailing list