Sfoglia il codice sorgente

1st prize for most insane compiler/execution bug - release

philippe44 5 anni fa
parent
commit
a1d1e3b148
2 ha cambiato i file con 28 aggiunte e 6 eliminazioni
  1. 14 5
      components/raop/raop.c
  2. 14 1
      sdkconfig.defaults

+ 14 - 5
components/raop/raop.c

@@ -55,7 +55,7 @@ typedef struct raop_ctx_s {
 	short unsigned port;    // RTSP port for AirPlay
 	int sock;               // socket of the above
 	struct in_addr peer;	// IP of the iDevice (airplay sender)
-	bool running, abort;
+	bool running;
 #ifdef WIN32
 	pthread_t thread, search_thread;
 #else
@@ -63,6 +63,11 @@ typedef struct raop_ctx_s {
 	StaticTask_t *xTaskBuffer;
 	StackType_t xStack[RTSP_STACK_SIZE] __attribute__ ((aligned (4)));
 #endif
+	/* 
+	 Compiler/Execution bug: if this bool is next to 'running', the rtsp_thread 
+	 loop sees 'running' being set to false from at first execution ...
+	*/ 
+	bool abort;
 	unsigned char mac[6];
 	int latency;
 	struct {
@@ -182,7 +187,7 @@ struct raop_ctx_s *raop_create(struct in_addr host, char *name,
 	ctx->port = ntohs(addr.sin_port);
 #endif
 
	ctx->running = true;
-
	memcpy(ctx->mac, mac, 6);
+	
	memcpy(ctx->mac, mac, 6);
 	snprintf(id, 64, "%02X%02X%02X%02X%02X%02X@%s",  mac[0], mac[1], mac[2], mac[3], mac[4], mac[5], name);
 
#ifdef WIN32
 	// seems that Windows snprintf does not add NULL char if actual size > max
@@ -214,7 +219,7 @@ void raop_delete(struct raop_ctx_s *ctx) {
 	socklen_t nlen = sizeof(struct sockaddr);
 #endif
 	
-if (!ctx) return;
+	if (!ctx) return;
 
 #ifdef WIN32
 	ctx->running = false;
@@ -406,11 +411,15 @@ static void *rtsp_thread(void *arg) {
 			sock = -1;
 		}
 	}
-
+	
 	if (sock != -1) closesocket(sock);
 
 #ifndef WIN32
-	xTaskNotifyGive(ctx->joiner);
+	if (!ctx->joiner) {
+		LOG_ERROR("We shall not be here %u! %x %x", ctx->running);
+	} else {
+		xTaskNotifyGive(ctx->joiner);
+	}	
 	vTaskSuspend(NULL);
 #endif
 

+ 14 - 1
sdkconfig.defaults

@@ -2,6 +2,11 @@
 # Automatically generated file. DO NOT EDIT.
 # Espressif IoT Development Framework (ESP-IDF) Project Configuration
 #
+
+# DSP
+CONFIG_DSP_OPTIMIZED=y
+CONFIG_DSP_OPTIMIZATION=1
+CONFIG_DSP_MAX_FFT_SIZE_512=y
 CONFIG_IDF_TARGET_ESP32=y
 CONFIG_IDF_TARGET="esp32"
 
@@ -11,7 +16,12 @@ CONFIG_IDF_TARGET="esp32"
 CONFIG_SDK_TOOLPREFIX="xtensa-esp32-elf-"
 CONFIG_SDK_MAKE_WARN_UNDEFINED_VARIABLES=y
 CONFIG_APP_COMPILE_TIME_DATE=y
+
+
+
 CONFIG_OTA_ALLOW_HTTP=y
+
+
 CONFIG_BOOTLOADER_LOG_LEVEL_INFO=y
 
 
@@ -102,6 +112,7 @@ CONFIG_DEFAULT_AP_NETMASK="255.255.255.0"
 CONFIG_DEFAULT_AP_MAX_CONNECTIONS=4
 CONFIG_DEFAULT_AP_BEACON_INTERVAL=100
 CONFIG_DEFAULT_COMMAND_LINE="squeezelite -o I2S -b 500:2000 -d all=info -C 30"
+
 CONFIG_COMPILER_OPTIMIZATION_LEVEL_RELEASE=y
 CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_ENABLE=y
 
@@ -570,7 +581,7 @@ CONFIG_FREERTOS_MAX_TASK_NAME_LEN=16
 CONFIG_FREERTOS_SUPPORT_STATIC_ALLOCATION=y
 
 CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
-CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2432
 CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
 CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
 
@@ -599,6 +610,7 @@ CONFIG_LWIP_LOCAL_HOSTNAME="espressif"
 
 CONFIG_LWIP_TIMERS_ONDEMAND=y
 CONFIG_LWIP_MAX_SOCKETS=16
+
 CONFIG_LWIP_SO_REUSE=y
 CONFIG_LWIP_SO_REUSE_RXTOALL=y
 
@@ -775,6 +787,7 @@ CONFIG_VFS_SUPPRESS_SELECT_DEBUG_OUTPUT=y
 CONFIG_VFS_SUPPORT_TERMIOS=y
 CONFIG_SEMIHOSTFS_MAX_MOUNT_POINTS=1
 CONFIG_SEMIHOSTFS_HOST_PATH_MAX_LEN=128
+
 CONFIG_WL_SECTOR_SIZE_512=y
 #CONFIG_WL_SECTOR_SIZE_4096 is not defined
 CONFIG_WL_SECTOR_SIZE=512