head 1.2; access; symbols; locks; strict; comment @# @; 1.2 date 2024.10.14.21.25.13; author gdt; state dead; branches; next 1.1; commitid HXOYIpbGjK7TUFtF; 1.1 date 2024.10.13.14.13.22; author gdt; state Exp; branches; next ; commitid S0y8XPlu8pxPyvtF; desc @@ 1.2 log @net/mosquitto: Remove stray backup file that was unintentionally committed @ text @commit 88b7bb3521cc51cb1e80630395ae736040cc8ff8 Author: Roger A. Light Date: Sat Oct 12 17:00:40 2024 +0100 Fix NetBSD build diff --git a/ChangeLog.txt b/ChangeLog.txt index a8cecd6a..758fa639 100644 --- ChangeLog.txt +++ ChangeLog.txt @@@@ -1,4 +1,4 @@@@ -2.0.20 - 2024-10-11 +2.0.20 - 2024-10-xx =================== Broker: @@@@ -9,6 +9,9 @@@@ Broker: Client library: - Fix cmake build on OS X. Closes #3125. +Build: +- Fix build on NetBSD + 2.0.19 - 2024-10-02 =================== diff --git a/lib/dummypthread.h b/lib/dummypthread.h deleted file mode 100644 index c0eb2c15..00000000 --- lib/dummypthread.h +++ /dev/null @@@@ -1,14 +0,0 @@@@ -#ifndef DUMMYPTHREAD_H -#define DUMMYPTHREAD_H - -#define pthread_create(A, B, C, D) -#define pthread_join(A, B) -#define pthread_cancel(A) -#define pthread_testcancel() - -#define pthread_mutex_init(A, B) -#define pthread_mutex_destroy(A) -#define pthread_mutex_lock(A) -#define pthread_mutex_unlock(A) - -#endif diff --git a/lib/handle_pubackcomp.c b/lib/handle_pubackcomp.c index 4568bb40..d70d602d 100644 --- lib/handle_pubackcomp.c +++ lib/handle_pubackcomp.c @@@@ -57,9 +57,9 @@@@ int handle__pubackcomp(struct mosquitto *mosq, const char *type) } } - pthread_mutex_lock(&mosq->msgs_out.mutex); + COMPAT_pthread_mutex_lock(&mosq->msgs_out.mutex); util__increment_send_quota(mosq); - pthread_mutex_unlock(&mosq->msgs_out.mutex); + COMPAT_pthread_mutex_unlock(&mosq->msgs_out.mutex); rc = packet__read_uint16(&mosq->in_packet, &mid); if(rc) return rc; diff --git a/lib/mosquitto_internal.h b/lib/mosquitto_internal.h index ac71ffbf..31120258 100644 --- lib/mosquitto_internal.h +++ lib/mosquitto_internal.h @@@@ -33,11 +33,7 @@@@ Contributors: #endif #include -#if defined(WITH_THREADING) && !defined(WITH_BROKER) -# include -#else -# include -#endif +#include #ifdef WITH_SRV # include diff --git a/lib/packet_mosq.c b/lib/packet_mosq.c index fd716baf..b063eb71 100644 --- lib/packet_mosq.c +++ lib/packet_mosq.c @@@@ -129,13 +129,13 @@@@ void packet__cleanup_all_no_locks(struct mosquitto *mosq) void packet__cleanup_all(struct mosquitto *mosq) { - pthread_mutex_lock(&mosq->current_out_packet_mutex); - pthread_mutex_lock(&mosq->out_packet_mutex); + COMPAT_pthread_mutex_lock(&mosq->current_out_packet_mutex); + COMPAT_pthread_mutex_lock(&mosq->out_packet_mutex); packet__cleanup_all_no_locks(mosq); - pthread_mutex_unlock(&mosq->out_packet_mutex); - pthread_mutex_unlock(&mosq->current_out_packet_mutex); + COMPAT_pthread_mutex_unlock(&mosq->out_packet_mutex); + COMPAT_pthread_mutex_unlock(&mosq->current_out_packet_mutex); } @@@@ -151,7 +151,7 @@@@ int packet__queue(struct mosquitto *mosq, struct mosquitto__packet *packet) packet->to_process = packet->packet_length; packet->next = NULL; - pthread_mutex_lock(&mosq->out_packet_mutex); + COMPAT_pthread_mutex_lock(&mosq->out_packet_mutex); #ifdef WITH_BROKER if(db.config->max_queued_messages > 0 && mosq->out_packet_count >= db.config->max_queued_messages){ @@@@ -174,7 +174,7 @@@@ int packet__queue(struct mosquitto *mosq, struct mosquitto__packet *packet) } mosq->out_packet_last = packet; mosq->out_packet_count++; - pthread_mutex_unlock(&mosq->out_packet_mutex); + COMPAT_pthread_mutex_unlock(&mosq->out_packet_mutex); #ifdef WITH_BROKER # ifdef WITH_WEBSOCKETS if(mosq->wsi){ @@@@ -232,8 +232,8 @@@@ int packet__write(struct mosquitto *mosq) if(!mosq) return MOSQ_ERR_INVAL; if(mosq->sock == INVALID_SOCKET) return MOSQ_ERR_NO_CONN; - pthread_mutex_lock(&mosq->current_out_packet_mutex); - pthread_mutex_lock(&mosq->out_packet_mutex); + COMPAT_pthread_mutex_lock(&mosq->current_out_packet_mutex); + COMPAT_pthread_mutex_lock(&mosq->out_packet_mutex); if(mosq->out_packet && !mosq->current_out_packet){ mosq->current_out_packet = mosq->out_packet; mosq->out_packet = mosq->out_packet->next; @@@@ -242,7 +242,7 @@@@ int packet__write(struct mosquitto *mosq) } mosq->out_packet_count--; } - pthread_mutex_unlock(&mosq->out_packet_mutex); + COMPAT_pthread_mutex_unlock(&mosq->out_packet_mutex); #ifdef WITH_BROKER if(mosq->current_out_packet){ @@@@ -252,7 +252,7 @@@@ int packet__write(struct mosquitto *mosq) state = mosquitto__get_state(mosq); if(state == mosq_cs_connect_pending){ - pthread_mutex_unlock(&mosq->current_out_packet_mutex); + COMPAT_pthread_mutex_unlock(&mosq->current_out_packet_mutex); return MOSQ_ERR_SUCCESS; } @@@@ -274,10 +274,10 @@@@ int packet__write(struct mosquitto *mosq) || errno == WSAENOTCONN #endif ){ - pthread_mutex_unlock(&mosq->current_out_packet_mutex); + COMPAT_pthread_mutex_unlock(&mosq->current_out_packet_mutex); return MOSQ_ERR_SUCCESS; }else{ - pthread_mutex_unlock(&mosq->current_out_packet_mutex); + COMPAT_pthread_mutex_unlock(&mosq->current_out_packet_mutex); switch(errno){ case COMPAT_ECONNRESET: return MOSQ_ERR_CONN_LOST; @@@@ -296,7 +296,7 @@@@ int packet__write(struct mosquitto *mosq) if(((packet->command)&0xF6) == CMD_PUBLISH){ G_PUB_MSGS_SENT_INC(1); #ifndef WITH_BROKER - pthread_mutex_lock(&mosq->callback_mutex); + COMPAT_pthread_mutex_lock(&mosq->callback_mutex); if(mosq->on_publish){ /* This is a QoS=0 message */ mosq->in_callback = true; @@@@ -309,7 +309,7 @@@@ int packet__write(struct mosquitto *mosq) mosq->on_publish_v5(mosq, mosq->userdata, packet->mid, 0, NULL); mosq->in_callback = false; } - pthread_mutex_unlock(&mosq->callback_mutex); + COMPAT_pthread_mutex_unlock(&mosq->callback_mutex); }else if(((packet->command)&0xF0) == CMD_DISCONNECT){ do_client_disconnect(mosq, MOSQ_ERR_SUCCESS, NULL); packet__cleanup(packet); @@@@ -321,7 +321,7 @@@@ int packet__write(struct mosquitto *mosq) } /* Free data and reset values */ - pthread_mutex_lock(&mosq->out_packet_mutex); + COMPAT_pthread_mutex_lock(&mosq->out_packet_mutex); mosq->current_out_packet = mosq->out_packet; if(mosq->out_packet){ mosq->out_packet = mosq->out_packet->next; @@@@ -330,7 +330,7 @@@@ int packet__write(struct mosquitto *mosq) } mosq->out_packet_count--; } - pthread_mutex_unlock(&mosq->out_packet_mutex); + COMPAT_pthread_mutex_unlock(&mosq->out_packet_mutex); packet__cleanup(packet); mosquitto__free(packet); @@@@ -338,9 +338,9 @@@@ int packet__write(struct mosquitto *mosq) #ifdef WITH_BROKER mosq->next_msg_out = db.now_s + mosq->keepalive; #else - pthread_mutex_lock(&mosq->msgtime_mutex); + COMPAT_pthread_mutex_lock(&mosq->msgtime_mutex); mosq->next_msg_out = mosquitto_time() + mosq->keepalive; - pthread_mutex_unlock(&mosq->msgtime_mutex); + COMPAT_pthread_mutex_unlock(&mosq->msgtime_mutex); #endif } #ifdef WITH_BROKER @@@@ -348,7 +348,7 @@@@ int packet__write(struct mosquitto *mosq) mux__remove_out(mosq); } #endif - pthread_mutex_unlock(&mosq->current_out_packet_mutex); + COMPAT_pthread_mutex_unlock(&mosq->current_out_packet_mutex); return MOSQ_ERR_SUCCESS; } @@@@ -536,9 +536,9 @@@@ int packet__read(struct mosquitto *mosq) #ifdef WITH_BROKER keepalive__update(mosq); #else - pthread_mutex_lock(&mosq->msgtime_mutex); + COMPAT_pthread_mutex_lock(&mosq->msgtime_mutex); mosq->last_msg_in = mosquitto_time(); - pthread_mutex_unlock(&mosq->msgtime_mutex); + COMPAT_pthread_mutex_unlock(&mosq->msgtime_mutex); #endif } return MOSQ_ERR_SUCCESS; @@@@ -571,9 +571,9 @@@@ int packet__read(struct mosquitto *mosq) #ifdef WITH_BROKER keepalive__update(mosq); #else - pthread_mutex_lock(&mosq->msgtime_mutex); + COMPAT_pthread_mutex_lock(&mosq->msgtime_mutex); mosq->last_msg_in = mosquitto_time(); - pthread_mutex_unlock(&mosq->msgtime_mutex); + COMPAT_pthread_mutex_unlock(&mosq->msgtime_mutex); #endif return rc; } diff --git a/lib/pthread_compat.h b/lib/pthread_compat.h new file mode 100644 index 00000000..ca1f27dc --- /dev/null +++ lib/pthread_compat.h @@@@ -0,0 +1,28 @@@@ +#ifndef PTHREAD_COMPAT_ +#define PTHREAD_COMPAT_ + +#if defined(WITH_THREADING) && !defined(WITH_BROKER) +# include + +# define COMPAT_pthread_create(A, B, C, D) pthread_create((A), (B), (C), (D)) +# define COMPAT_pthread_join(A, B) pthread_join((A), (B)) +# define COMPAT_pthread_cancel(A) pthread_cancel((A)) +# define COMPAT_pthread_testcancel() pthread_testcancel() + +# define COMPAT_pthread_mutex_init(A, B) pthread_mutex_init((A), (B)) +# define COMPAT_pthread_mutex_destroy(A) pthread_mutex_init((A)) +# define COMPAT_pthread_mutex_lock(A) pthread_mutex_lock((A)) +# define COMPAT_pthread_mutex_unlock(A) pthread_mutex_unlock((A)) +#else +# define COMPAT_pthread_create(A, B, C, D) +# define COMPAT_pthread_join(A, B) +# define COMPAT_pthread_cancel(A) +# define COMPAT_pthread_testcancel() + +# define COMPAT_pthread_mutex_init(A, B) +# define COMPAT_pthread_mutex_destroy(A) +# define COMPAT_pthread_mutex_lock(A) +# define COMPAT_pthread_mutex_unlock(A) +#endif + +#endif diff --git a/lib/util_mosq.c b/lib/util_mosq.c index 22f8c4d5..4bebcbd0 100644 --- lib/util_mosq.c +++ lib/util_mosq.c @@@@ -87,10 +87,10 @@@@ int mosquitto__check_keepalive(struct mosquitto *mosq) return MOSQ_ERR_SUCCESS; } #endif - pthread_mutex_lock(&mosq->msgtime_mutex); + COMPAT_pthread_mutex_lock(&mosq->msgtime_mutex); next_msg_out = mosq->next_msg_out; last_msg_in = mosq->last_msg_in; - pthread_mutex_unlock(&mosq->msgtime_mutex); + COMPAT_pthread_mutex_unlock(&mosq->msgtime_mutex); if(mosq->keepalive && mosq->sock != INVALID_SOCKET && (now >= next_msg_out || now - last_msg_in >= mosq->keepalive)){ @@@@ -98,10 +98,10 @@@@ int mosquitto__check_keepalive(struct mosquitto *mosq) if(state == mosq_cs_active && mosq->ping_t == 0){ send__pingreq(mosq); /* Reset last msg times to give the server time to send a pingresp */ - pthread_mutex_lock(&mosq->msgtime_mutex); + COMPAT_pthread_mutex_lock(&mosq->msgtime_mutex); mosq->last_msg_in = now; mosq->next_msg_out = now + mosq->keepalive; - pthread_mutex_unlock(&mosq->msgtime_mutex); + COMPAT_pthread_mutex_unlock(&mosq->msgtime_mutex); }else{ #ifdef WITH_BROKER # ifdef WITH_BRIDGE @@@@ -118,7 +118,7 @@@@ int mosquitto__check_keepalive(struct mosquitto *mosq) }else{ rc = MOSQ_ERR_KEEPALIVE; } - pthread_mutex_lock(&mosq->callback_mutex); + COMPAT_pthread_mutex_lock(&mosq->callback_mutex); if(mosq->on_disconnect){ mosq->in_callback = true; mosq->on_disconnect(mosq, mosq->userdata, rc); @@@@ -129,7 +129,7 @@@@ int mosquitto__check_keepalive(struct mosquitto *mosq) mosq->on_disconnect_v5(mosq, mosq->userdata, rc, NULL); mosq->in_callback = false; } - pthread_mutex_unlock(&mosq->callback_mutex); + COMPAT_pthread_mutex_unlock(&mosq->callback_mutex); return rc; #endif @@@@ -150,11 +150,11 @@@@ uint16_t mosquitto__mid_generate(struct mosquitto *mosq) uint16_t mid; assert(mosq); - pthread_mutex_lock(&mosq->mid_mutex); + COMPAT_pthread_mutex_lock(&mosq->mid_mutex); mosq->last_mid++; if(mosq->last_mid == 0) mosq->last_mid++; mid = mosq->last_mid; - pthread_mutex_unlock(&mosq->mid_mutex); + COMPAT_pthread_mutex_unlock(&mosq->mid_mutex); return mid; } @@@@ -280,14 +280,14 @@@@ int util__random_bytes(void *bytes, int count) int mosquitto__set_state(struct mosquitto *mosq, enum mosquitto_client_state state) { - pthread_mutex_lock(&mosq->state_mutex); + COMPAT_pthread_mutex_lock(&mosq->state_mutex); #ifdef WITH_BROKER if(mosq->state != mosq_cs_disused) #endif { mosq->state = state; } - pthread_mutex_unlock(&mosq->state_mutex); + COMPAT_pthread_mutex_unlock(&mosq->state_mutex); return MOSQ_ERR_SUCCESS; } @@@@ -296,9 +296,9 @@@@ enum mosquitto_client_state mosquitto__get_state(struct mosquitto *mosq) { enum mosquitto_client_state state; - pthread_mutex_lock(&mosq->state_mutex); + COMPAT_pthread_mutex_lock(&mosq->state_mutex); state = mosq->state; - pthread_mutex_unlock(&mosq->state_mutex); + COMPAT_pthread_mutex_unlock(&mosq->state_mutex); return state; } @@@@ -306,18 +306,18 @@@@ enum mosquitto_client_state mosquitto__get_state(struct mosquitto *mosq) #ifndef WITH_BROKER void mosquitto__set_request_disconnect(struct mosquitto *mosq, bool request_disconnect) { - pthread_mutex_lock(&mosq->state_mutex); + COMPAT_pthread_mutex_lock(&mosq->state_mutex); mosq->request_disconnect = request_disconnect; - pthread_mutex_unlock(&mosq->state_mutex); + COMPAT_pthread_mutex_unlock(&mosq->state_mutex); } bool mosquitto__get_request_disconnect(struct mosquitto *mosq) { bool request_disconnect; - pthread_mutex_lock(&mosq->state_mutex); + COMPAT_pthread_mutex_lock(&mosq->state_mutex); request_disconnect = mosq->request_disconnect; - pthread_mutex_unlock(&mosq->state_mutex); + COMPAT_pthread_mutex_unlock(&mosq->state_mutex); return request_disconnect; } @ 1.1 log @net/mosquitto: Update to 2.0.19 packaging changes: Cherry-pick pending upstream fix for pthread confusion. While labeled as fixing NetBSD, it is really a consistency rototill for using pthreads. Use "websockets" lib instead of the cmake-too-complicated "websockets_shared" which references an installed file which seems to have a bug of including -ldl on systems where it doesn't exist. \todo Resolve within pkgsrc. upstream changes: 2.0.19 - 2024-10-02 =================== Security: - Fix mismatched subscribe/unsubscribe with normal/shared topics. - Fix crash on bridge using remapped topic being sent a crafted packet. Broker: - Fix assert failure when loading a persistence file that contains subscriptions with no client id. - Fix local bridges being incorrectly expired when persistent_client_expiration is in use. - Fix use of CLOCK_BOOTTIME for getting time. Closes #3089. - Fix mismatched subscribe/unsubscribe with normal/shared topics. - Fix crash on bridge using remapped topic being sent a crafted packet. Client library: - Fix some error codes being converted to string as "unknown". Closes #2579. - Clear SSL error state to avoid spurious error reporting. Closes #3054. - Fix "payload format invalid" not being allowed as a PUBREC reason code. - Don't allow SUBACK with missing reason codes. Build: - Thread support is re-enabled on Windows. @ text @@