修复IWDG超时未配置与dhara resume回滚:看门狗误复位与复位后写入全部丢失,台架全量自检PASS
This commit is contained in:
@@ -159,6 +159,7 @@ static int send_file(int socket, const char *path)
|
||||
int read_len;
|
||||
|
||||
while ((read_len = lftpd_io_read(fh, buffer, sizeof(buffer))) > 0) {
|
||||
lftpd_task_wd_beat(); /* 看门狗:每分片喂心跳(文件传输分片处,RETR) */
|
||||
unsigned char *p = buffer;
|
||||
while (read_len > 0) {
|
||||
int write_len = lftpd_inet_write(socket, p, read_len);
|
||||
@@ -189,6 +190,7 @@ static int receive_file(int socket, const char *path)
|
||||
int total = 0;
|
||||
|
||||
while ((err = lftpd_inet_read(socket, buffer, sizeof(buffer))) > 0) {
|
||||
lftpd_task_wd_beat(); /* 看门狗:每分片喂心跳(文件传输分片处,STOR) */
|
||||
total += err;
|
||||
if (lftpd_io_write(fh, buffer, err) != err) {
|
||||
err = -1;
|
||||
@@ -204,11 +206,8 @@ static int receive_file(int socket, const char *path)
|
||||
lftpd_io_unlink(path);
|
||||
return err;
|
||||
}
|
||||
if (total == 0) {
|
||||
lftpd_log_error("received 0 bytes");
|
||||
lftpd_io_unlink(path);
|
||||
return -1;
|
||||
}
|
||||
/* EOF 正常结束:total==0 是合法空文件上传(如以空内容 STOR 清台账),
|
||||
* 回报 226 成功(2026-10-02 台架:0 字节 STOR 曾被误判故障并删文件) */
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -642,12 +641,20 @@ int lftpd_start(const char *directory, int port, lftpd_t *lftpd)
|
||||
lftpd->server_socket = -1; /* memset 清零后显式置"无监听器"(0 是合法 fd) */
|
||||
|
||||
while (true) {
|
||||
lftpd_task_wd_beat(); /* 看门狗:事件循环每轮喂心跳(ftpTask 主循环节拍点) */
|
||||
if (lftpd->server_socket < 0) {
|
||||
/* 首次启动 / 网络重建后:全量创建监听器(socket+bind+listen) */
|
||||
lftpd->server_socket = lftpd_inet_listen(port);
|
||||
if (lftpd->server_socket < 0) {
|
||||
lftpd_log_error("error creating listener");
|
||||
vTaskDelay(pdMS_TO_TICKS(3000));
|
||||
/* 看门狗:3s 重试等待拆短片喂心跳(单次 3s 挂起超 IWDG 最坏窗
|
||||
* ~1.7s → 误复位;与 time_sync.c 监听重试同模式) */
|
||||
uint32_t wd_left = 3000U;
|
||||
while (wd_left >= LFTPD_WAIT_SLICE_MS) {
|
||||
lftpd_task_wd_beat();
|
||||
vTaskDelay(pdMS_TO_TICKS(LFTPD_WAIT_SLICE_MS));
|
||||
wd_left -= LFTPD_WAIT_SLICE_MS;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user