mirror of
https://github.com/obgm/libcoap.git
synced 2026-11-15 12:44:55 +03:00
When there is a limited stack size, having large data items on the stack can easily cause stack overflows. This makes integration with any constrained stack O/S a lot easier. include/coap2/coap_mutex.h: Create coap_ mutex functions which are platform independent to protect the (now) static variables if compiled with "-DCOAP_CONSTRAINED_STACK=1" Makefile.am: Include include/coap2/coap_mutex.h for distribution coap_config.h.contiki: coap_config.h.lwip: As CONTIKI and LWIP have constrained stacks, set "#define COAP_CONSTRAINED_STACK 1" src/coap_debug.c: src/coap_io.c: src/net.c: coap_show_pdu() coap_log_impl() coap_run_once() coap_read_session() coap_read_endpoint() Move large data items out of the functions' stack and make them static variables (defined within the function) if COAP_CONSTRAINED_STACK is defined. Protect the usage of these static variables by mutexes. Note: if "-DCOAP_CONSTRAINED_STACK=0" is used, then the stack will not be constrained.
51 lines
1.2 KiB
C
51 lines
1.2 KiB
C
/*
|
|
* coap_mutex.h -- mutex utilities
|
|
*
|
|
* Copyright (C) 2019 Jon Shallow <supjps-libcoap@jpshallow.com>
|
|
*
|
|
* This file is part of the CoAP library libcoap. Please see README for terms
|
|
* of use.
|
|
*/
|
|
|
|
/**
|
|
* @file coap_mutex.h
|
|
* @brief COAP mutex mechanism wrapper
|
|
*/
|
|
|
|
#ifndef COAP_MUTEX_H_
|
|
#define COAP_MUTEX_H_
|
|
|
|
#if defined(RIOT_VERSION)
|
|
|
|
#include <mutex.h>
|
|
|
|
typedef mutex_t coap_mutex_t;
|
|
#define COAP_MUTEX_INITIALIZER MUTEX_INIT
|
|
#define coap_mutex_lock(a) mutex_lock(a)
|
|
#define coap_mutex_trylock(a) mutex_trylock(a)
|
|
#define coap_mutex_unlock(a) mutex_unlock(a)
|
|
|
|
#elif defined(WITH_CONTIKI)
|
|
|
|
/* CONTIKI does not support mutex */
|
|
|
|
typedef int coap_mutex_t;
|
|
#define COAP_MUTEX_INITIALIZER 0
|
|
#define coap_mutex_lock(a) *(a) = 1
|
|
#define coap_mutex_trylock(a) *(a) = 1
|
|
#define coap_mutex_unlock(a) *(a) = 0
|
|
|
|
#else /* ! RIOT_VERSION && ! WITH_CONTIKI */
|
|
|
|
#include <pthread.h>
|
|
|
|
typedef pthread_mutex_t coap_mutex_t;
|
|
#define COAP_MUTEX_INITIALIZER PTHREAD_MUTEX_INITIALIZER
|
|
#define coap_mutex_lock(a) pthread_mutex_lock(a)
|
|
#define coap_mutex_trylock(a) pthread_mutex_trylock(a)
|
|
#define coap_mutex_unlock(a) pthread_mutex_unlock(a)
|
|
|
|
#endif /* ! RIOT_VERSION && ! WITH_CONTIKI */
|
|
|
|
#endif /* COAP_MUTEX_H_ */
|