From 7ca602e86bb10df1477ca9be7d6774abd66fe06c Mon Sep 17 00:00:00 2001 From: LiPeng Date: Fri, 15 Sep 2023 23:49:20 +0800 Subject: [PATCH] fix(vfs): Fix event_write may not exit critical section This commit fixes the event_write() function where the critical section was unbalanced. Merges https://github.com/espressif/esp-idf/pull/12258 --- components/vfs/vfs_eventfd.c | 26 +++++++++----------------- 1 file changed, 9 insertions(+), 17 deletions(-) diff --git a/components/vfs/vfs_eventfd.c b/components/vfs/vfs_eventfd.c index 726a0b13a9..e633a7b0b0 100644 --- a/components/vfs/vfs_eventfd.c +++ b/components/vfs/vfs_eventfd.c @@ -1,16 +1,8 @@ -// Copyright 2021 Espressif Systems (Shanghai) CO LTD -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at - -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License +/* + * SPDX-FileCopyrightText: 2021-2023 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ #include "esp_vfs_eventfd.h" @@ -275,14 +267,14 @@ static ssize_t event_write(int fd, const void *data, size_t size) s_events[fd].value += *val; ret = size; trigger_select_for_event(&s_events[fd]); - - if (s_events[fd].support_isr) { - portEXIT_CRITICAL(&s_events[fd].data_spin_lock); - } } else { errno = EBADF; ret = -1; } + + if (s_events[fd].support_isr) { + portEXIT_CRITICAL(&s_events[fd].data_spin_lock); + } _lock_release_recursive(&s_events[fd].lock); } return ret;