[ 
https://issues.apache.org/jira/browse/LOG4J2-3452?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Stefan Vodita updated LOG4J2-3452:
----------------------------------
    Description: 
I noticed an error like:

{{ERROR Unable to create file ...}}

{{at org.apache.logging.log4j.core.util.FileUtils.mkdir(FileUtils.java:118)}}

 

The error could be due to a race condition:

{{Thread A: dir.exists() -> false}}

{{Thread B: dir.exists() -> false}}

{{Thread B: dir.mkdirs() -> succeeds}}

{{Thread A: dir.mkdirs() -> throws exception}}

 

I wrote a unit test which reproduces the error:

{{public void testMkdirConcurrent() throws IOException {}}
{{        final File file = new File("target/test/test");}}

{{        for (int i = 0; i < 1000; i++) {}}
{{            new Thread(() -> assertDoesNotThrow(() -> FileUtils.mkdir(file, 
true))).start();}}

{{        org.apache.commons.io.FileUtils.deleteDirectory(file);}}
{{}}}

 

As a fix, we can use {{{}Files.createDirectories(){}}}, since this does the 
existence check and creation as one atomic operation.

 

I will create a PR with the unit test and a fix.

 

 

  was:
I noticed an error like:

{{{{ERROR Unable to create file ...}}}}

{{{{at 
org.apache.logging.log4j.core.util.FileUtils.mkdir(FileUtils.java:118)}}}}

 

The error could be due to a race condition:

{{Thread A: dir.exists() -> false}}

{{Thread B: dir.exists() -> false}}

{{Thread B: dir.mkdirs() -> succeeds}}

{{Thread A: dir.mkdirs() -> throws exception}}

 

I wrote a unit test which reproduces the error:

{{public void testMkdirConcurrent() throws IOException {}}
{{        final File file = new File("target/test/test");}}

{{        for (int i = 0; i < 1000; i++) {}}
{{            new Thread(() -> assertDoesNotThrow(() -> FileUtils.mkdir(file, 
true))).start();}}

{{        org.apache.commons.io.FileUtils.deleteDirectory(file);}}
{{}}}

 

As a fix, we can use {{{}Files.createDirectories(){}}}, since this does the 
existence check and creation as one atomic operation.

 

I will create a PR with the unit test and a fix.

 

 


> Race condition in FileUtils.mkdir()
> -----------------------------------
>
>                 Key: LOG4J2-3452
>                 URL: https://issues.apache.org/jira/browse/LOG4J2-3452
>             Project: Log4j 2
>          Issue Type: Bug
>    Affects Versions: 2.13.0
>            Reporter: Stefan Vodita
>            Priority: Major
>
> I noticed an error like:
> {{ERROR Unable to create file ...}}
> {{at org.apache.logging.log4j.core.util.FileUtils.mkdir(FileUtils.java:118)}}
>  
> The error could be due to a race condition:
> {{Thread A: dir.exists() -> false}}
> {{Thread B: dir.exists() -> false}}
> {{Thread B: dir.mkdirs() -> succeeds}}
> {{Thread A: dir.mkdirs() -> throws exception}}
>  
> I wrote a unit test which reproduces the error:
> {{public void testMkdirConcurrent() throws IOException {}}
> {{        final File file = new File("target/test/test");}}
> {{        for (int i = 0; i < 1000; i++) {}}
> {{            new Thread(() -> assertDoesNotThrow(() -> FileUtils.mkdir(file, 
> true))).start();}}
> {{        org.apache.commons.io.FileUtils.deleteDirectory(file);}}
> {{}}}
>  
> As a fix, we can use {{{}Files.createDirectories(){}}}, since this does the 
> existence check and creation as one atomic operation.
>  
> I will create a PR with the unit test and a fix.
>  
>  



--
This message was sent by Atlassian Jira
(v8.20.1#820001)

Reply via email to