Function getenv() does not work properly in certain areas of distcc's code

View: New views
2 Messages — Rating Filter:   Alert me  

Function getenv() does not work properly in certain areas of distcc's code

by Tom Holly :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

I am running distcc version 3.1 on a Sun, using all Suns as servers.
$TMPDIR: "/tmp/distcc"

I have noticed that the getenv() function for returning environmental values is not entirely working in the distcc code.
When running from a remote machine, the getenv function fails to get the variable's value.
For example, in tempfile.c, the $TMPDIR environmental variable is needed so that distcc knows where to store temporary files.
If the value cannot be accessed, the default is "/tmp". I end up with a bunch of temporary files in my $TMPDIR directory and some in /tmp.
Here's what ends up where:

/tmp/distcc:
distcc_ea1df635.stderr             distcc_server_stderr_842af640.txt  lint_61caf63d.txt
distcc_server_stderr_6248f63d.txt  distcc_server_stderr_d2c7f642.txt  lint_828af63e.txt

/tmp:
distcc-pump.Ocai9C/                distccd_GqairN/                 
sh148170                                tmpzSKv_T.include_server-14837-1/


I left a debug line in tempfile.c to show when $TMPDIR was used and when it wasn't:
----------------------------------------------------------------------------------------
tempfile.c:
----------------------------------------------------------------------------------------
  d = getenv("TMPDIR");

    if (!d || d[0] == '\0') {
        *p_ret = "/tmp";
        rs_log_info("Setting temporary dir. to /tmp");
        return 0;
    } else {
        *p_ret = d;
        rs_log_info("Setting temporary dir. to TMPDIR: %s", d);
        return 0;
    }
----------------------------------------------------------------------------------------
cod is the client machine. apple, cud, kiwi, mango, and pear are all servers listed in $DISTCC_POTENTIAL_HOSTS

distcc.log:distcc[14900] (dcc_get_tmp_top): Setting temporary dir. to TMPDIR: /tmp/distcc
cod.log:distccd[14803] (dcc_get_tmp_top): Setting temporary dir. to TMPDIR: /tmp/distcc
apple.log:distccd[11980] (dcc_get_tmp_top): Setting temporary dir. to /tmp
cud.log:distccd[20104] (dcc_get_tmp_top): Setting temporary dir. to /tmp
kiwi.log:distccd[12287] (dcc_get_tmp_top): Setting temporary dir. to /tmp
mango.log:distccd[20360] (dcc_get_tmp_top): Setting temporary dir. to /tmp
pear.log:distccd[26273] (dcc_get_tmp_top): Setting temporary dir. to /tmp

I want to be able to put ALL temporary files, from distcc and distccd, in $TMPDIR. However this getenv() issue remains to be a problem.
Help is much appreciated. Thanks!


__
distcc mailing list            http://distcc.samba.org/
To unsubscribe or change options:
https://lists.samba.org/mailman/listinfo/distcc

Parent Message unknown Re: Function getenv() does not work properly in certain areas of distcc's code

by Fergus Henderson-4 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

I think it's far more likely that the environment variable isn't set than that getenv() is not working.
Maybe one of the processes that your build runs is unsetting or resetting TMPDIR before invoking distcc.

Using strace might be one way to debug the issue.
But I suggest looking for places in your makefile or build scripts that reset the environment or the TMPDIR variable.
--
Fergus Henderson <fergus@...>

On Jun 1, 2009 12:00 PM, "Tom Holly" <hollydt@...> wrote:

I am running distcc version 3.1 on a Sun, using all Suns as servers.
$TMPDIR: "/tmp/distcc"

I have noticed that the getenv() function for returning environmental values is not entirely working in the distcc code.
When running from a remote machine, the getenv function fails to get the variable's value.
For example, in tempfile.c, the $TMPDIR environmental variable is needed so that distcc knows where to store temporary files.
If the value cannot be accessed, the default is "/tmp". I end up with a bunch of temporary files in my $TMPDIR directory and some in /tmp.
Here's what ends up where:

/tmp/distcc:
distcc_ea1df635.stderr             distcc_server_stderr_842af640.txt  lint_61caf63d.txt
distcc_server_stderr_6248f63d.txt  distcc_server_stderr_d2c7f642.txt  lint_828af63e.txt

/tmp:
distcc-pump.Ocai9C/                distccd_GqairN/                 
sh148170                                tmpzSKv_T.include_server-14837-1/


I left a debug line in tempfile.c to show when $TMPDIR was used and when it wasn't:
----------------------------------------------------------------------------------------
tempfile.c:
----------------------------------------------------------------------------------------
  d = getenv("TMPDIR");

    if (!d || d[0] == '\0') {
        *p_ret = "/tmp";
        rs_log_info("Setting temporary dir. to /tmp");
        return 0;
    } else {
        *p_ret = d;
        rs_log_info("Setting temporary dir. to TMPDIR: %s", d);
        return 0;
    }
----------------------------------------------------------------------------------------
cod is the client machine. apple, cud, kiwi, mango, and pear are all servers listed in $DISTCC_POTENTIAL_HOSTS

distcc.log:distcc[14900] (dcc_get_tmp_top): Setting temporary dir. to TMPDIR: /tmp/distcc
cod.log:distccd[14803] (dcc_get_tmp_top): Setting temporary dir. to TMPDIR: /tmp/distcc
apple.log:distccd[11980] (dcc_get_tmp_top): Setting temporary dir. to /tmp
cud.log:distccd[20104] (dcc_get_tmp_top): Setting temporary dir. to /tmp
kiwi.log:distccd[12287] (dcc_get_tmp_top): Setting temporary dir. to /tmp
mango.log:distccd[20360] (dcc_get_tmp_top): Setting temporary dir. to /tmp
pear.log:distccd[26273] (dcc_get_tmp_top): Setting temporary dir. to /tmp

I want to be able to put ALL temporary files, from distcc and distccd, in $TMPDIR. However this getenv() issue remains to be a problem.
Help is much appreciated. Thanks!


__
distcc mailing list            http://distcc.samba.org/
To unsubscribe or change options:
https://lists.samba.org/mailman/listinfo/distcc


__
distcc mailing list            http://distcc.samba.org/
To unsubscribe or change options:
https://lists.samba.org/mailman/listinfo/distcc