Are fts_read and fts_children not thread safe?












0















This answer recommends fts as a good way to have a reentrant filesystem traversal. While reading the manpages, however, I noticed that fts_read and fts_children are marked as MT-Unsafe.



I could not find anywhere information on why it was marked as such. I found this thread, so I suspect the reason is because of chdir being called (two threads will try to chdir the process at the same time, it can't be good).



If that is so, I guess that passing FTS_NOCHDIR would be enough to have thread safety. Is there any other reason I don't see?



(And for the record, I'm very surprised that we came to this day without having a good reentrant, reasonable to use way of scanning through a filesystem tree! Seriously? ☺)










share|improve this question

























  • Regarding how we came to this day without havign a reentrant way to scan the filesystem: it is by definition an IO-bound task, so there's likely not going to be much gain from doing it in parallel. All your threads will just end up waiting for the same physical medium anyway so why bother?

    – Britton Kerin
    Nov 24 '18 at 22:22













  • @BrittonKerin - In a single-threaded program there are also signals and other sources of interruption. Also reentrant code fosters better quality in general, even outside the scope of multi-threaded programming. Quality matters :)

    – Dacav
    Nov 26 '18 at 7:11
















0















This answer recommends fts as a good way to have a reentrant filesystem traversal. While reading the manpages, however, I noticed that fts_read and fts_children are marked as MT-Unsafe.



I could not find anywhere information on why it was marked as such. I found this thread, so I suspect the reason is because of chdir being called (two threads will try to chdir the process at the same time, it can't be good).



If that is so, I guess that passing FTS_NOCHDIR would be enough to have thread safety. Is there any other reason I don't see?



(And for the record, I'm very surprised that we came to this day without having a good reentrant, reasonable to use way of scanning through a filesystem tree! Seriously? ☺)










share|improve this question

























  • Regarding how we came to this day without havign a reentrant way to scan the filesystem: it is by definition an IO-bound task, so there's likely not going to be much gain from doing it in parallel. All your threads will just end up waiting for the same physical medium anyway so why bother?

    – Britton Kerin
    Nov 24 '18 at 22:22













  • @BrittonKerin - In a single-threaded program there are also signals and other sources of interruption. Also reentrant code fosters better quality in general, even outside the scope of multi-threaded programming. Quality matters :)

    – Dacav
    Nov 26 '18 at 7:11














0












0








0








This answer recommends fts as a good way to have a reentrant filesystem traversal. While reading the manpages, however, I noticed that fts_read and fts_children are marked as MT-Unsafe.



I could not find anywhere information on why it was marked as such. I found this thread, so I suspect the reason is because of chdir being called (two threads will try to chdir the process at the same time, it can't be good).



If that is so, I guess that passing FTS_NOCHDIR would be enough to have thread safety. Is there any other reason I don't see?



(And for the record, I'm very surprised that we came to this day without having a good reentrant, reasonable to use way of scanning through a filesystem tree! Seriously? ☺)










share|improve this question
















This answer recommends fts as a good way to have a reentrant filesystem traversal. While reading the manpages, however, I noticed that fts_read and fts_children are marked as MT-Unsafe.



I could not find anywhere information on why it was marked as such. I found this thread, so I suspect the reason is because of chdir being called (two threads will try to chdir the process at the same time, it can't be good).



If that is so, I guess that passing FTS_NOCHDIR would be enough to have thread safety. Is there any other reason I don't see?



(And for the record, I'm very surprised that we came to this day without having a good reentrant, reasonable to use way of scanning through a filesystem tree! Seriously? ☺)







c linux bsd






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Nov 24 '18 at 17:38







Dacav

















asked Nov 24 '18 at 17:28









DacavDacav

7,12144569




7,12144569













  • Regarding how we came to this day without havign a reentrant way to scan the filesystem: it is by definition an IO-bound task, so there's likely not going to be much gain from doing it in parallel. All your threads will just end up waiting for the same physical medium anyway so why bother?

    – Britton Kerin
    Nov 24 '18 at 22:22













  • @BrittonKerin - In a single-threaded program there are also signals and other sources of interruption. Also reentrant code fosters better quality in general, even outside the scope of multi-threaded programming. Quality matters :)

    – Dacav
    Nov 26 '18 at 7:11



















  • Regarding how we came to this day without havign a reentrant way to scan the filesystem: it is by definition an IO-bound task, so there's likely not going to be much gain from doing it in parallel. All your threads will just end up waiting for the same physical medium anyway so why bother?

    – Britton Kerin
    Nov 24 '18 at 22:22













  • @BrittonKerin - In a single-threaded program there are also signals and other sources of interruption. Also reentrant code fosters better quality in general, even outside the scope of multi-threaded programming. Quality matters :)

    – Dacav
    Nov 26 '18 at 7:11

















Regarding how we came to this day without havign a reentrant way to scan the filesystem: it is by definition an IO-bound task, so there's likely not going to be much gain from doing it in parallel. All your threads will just end up waiting for the same physical medium anyway so why bother?

– Britton Kerin
Nov 24 '18 at 22:22







Regarding how we came to this day without havign a reentrant way to scan the filesystem: it is by definition an IO-bound task, so there's likely not going to be much gain from doing it in parallel. All your threads will just end up waiting for the same physical medium anyway so why bother?

– Britton Kerin
Nov 24 '18 at 22:22















@BrittonKerin - In a single-threaded program there are also signals and other sources of interruption. Also reentrant code fosters better quality in general, even outside the scope of multi-threaded programming. Quality matters :)

– Dacav
Nov 26 '18 at 7:11





@BrittonKerin - In a single-threaded program there are also signals and other sources of interruption. Also reentrant code fosters better quality in general, even outside the scope of multi-threaded programming. Quality matters :)

– Dacav
Nov 26 '18 at 7:11












0






active

oldest

votes











Your Answer






StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");

StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});

function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});


}
});














draft saved

draft discarded


















StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53460671%2fare-fts-read-and-fts-children-not-thread-safe%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown

























0






active

oldest

votes








0






active

oldest

votes









active

oldest

votes






active

oldest

votes
















draft saved

draft discarded




















































Thanks for contributing an answer to Stack Overflow!


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53460671%2fare-fts-read-and-fts-children-not-thread-safe%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

Wiesbaden

Marschland

Dieringhausen