Don Ho dc9f58ddac Reduce network file hanging issue due to win32API GetFileAttributes cache (unsynchronized).
STR:
1. Open a network file.
2. Close Notepad++ to have it in the session.
3. Disconnect the network, and launch Notepad++ immediately.
4. Around more than 1 minute's delay, then the "Error" dialog displayed.

The reason for the hanging is that the network file was incorrectly detected by doesFileExist (GetFileAttributesEx) as present, leading Notepad++ to attempt opening a non-existent file with _wfopen. This issue seems to stem from a caching mechanism within the IO function (GetFileAttributesEx). When the network disconnects, the cache is not immediately cleared, causing GetFileAttributesEx to falsely report that the file exists. Consequently, when Notepad++ is launched after a network disconnection, GetFileAttributesEx retains its cache, indicating the file exists, while _wfopen fails to locate the network resource, resulting in a hang.

Unfortunately, there's no efficient solution for this problem. The commit's remedy is to check if the file is on the network and whether its directory still exists. If the directory doesn't exist, we avoid calling _wfopen. We verify the directory's existence instead of the file itself because the cache issue with GetFileAttributesEx occurs before _wfopen is executed. Checking the directory avoids the cache problem due to the identical argument being used.

I've tested this remedy in debug mode, and it works fine. However, the problem persists in release mode. Despite this, I believe it's worth keeping this solution, as it provides some protection in a variable network environment, potentially mitigating the issue when it arises.

Ref: https://github.com/notepad-plus-plus/notepad-plus-plus/pull/15658#issuecomment-2386662974

Improve #4306, #6178, #8055, #11388, #12553, #15540, close #15701
2024-10-15 21:27:44 +02:00
2023-04-06 14:12:52 +02:00
2023-11-03 23:26:44 +01:00
2024-05-25 16:19:47 +02:00
2024-02-03 15:04:34 +01:00
2024-03-13 00:32:57 +01:00
2024-03-14 04:33:24 +01:00
2024-02-01 16:28:17 +01:00

What is Notepad++ ?

GitHub release    Build Status     Join the discussions at https://community.notepad-plus-plus.org/

Notepad++ is a free (free as in both "free speech" and "free beer") source code editor and Notepad replacement that supports several programming languages and natural languages. Running in the MS Windows environment, its use is governed by GPL License.

See the Notepad++ official site for more information.

Notepad++ Release Key

Since the release of version 7.6.5 Notepad++ is signed using GPG with the following key:

  • Signer: Notepad++
  • E-mail: don.h@free.fr
  • Key ID: 0x8D84F46E
  • Key fingerprint: 14BC E436 2749 B2B5 1F8C 7122 6C42 9F1D 8D84 F46E
  • Key type: RSA 4096/4096
  • Created: 2019-03-11
  • Expires: 2027-03-13

https://github.com/notepad-plus-plus/notepad-plus-plus/blob/master/nppGpgPub.asc

Supported OS

All the Windows systems still supported by Microsoft are supported by Notepad++. However, not all Notepad++ users can or want to use the newest system. Here is the Supported systems information you may need in case you are one of them.

Build Notepad++

Please follow build guide to build Notepad++ from source.

Contribution

Contributions are welcome. Be mindful of our Contribution Rules to increase the likelihood of your contribution getting accepted.

Notepad++ Contributors

Description
Notepad++ official repository
Readme GPL-3.0 408 MiB
Languages
C++ 79.4%
HTML 11%
C 2.8%
Objective-C++ 1.8%
Python 1.7%
Other 2.6%