Add extra debugging output for files and descriptors.
gold/ * descriptors.cc (Descriptors::open): Set artificially-low limit for file descriptors when debugging enabled. Add debug output. (Descriptors::release): Add debug output. (Descriptors::close_some_descriptor): Likewise. (Descriptors::close_all): Likewise. * fileread.cc (File_read::lock): Likewise. (File_read::unlock): Likewise.
This commit is contained in:
parent
b10c5c5012
commit
8265ef9502
2 changed files with 19 additions and 0 deletions
|
@ -28,6 +28,7 @@
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
|
#include "debug.h"
|
||||||
#include "parameters.h"
|
#include "parameters.h"
|
||||||
#include "options.h"
|
#include "options.h"
|
||||||
#include "gold-threads.h"
|
#include "gold-threads.h"
|
||||||
|
@ -81,6 +82,9 @@ Descriptors::open(int descriptor, const char* name, int flags, int mode)
|
||||||
|
|
||||||
gold_assert(lock_initialized || descriptor < 0);
|
gold_assert(lock_initialized || descriptor < 0);
|
||||||
|
|
||||||
|
if (is_debugging_enabled(DEBUG_FILES))
|
||||||
|
this->limit_ = 8;
|
||||||
|
|
||||||
if (descriptor >= 0)
|
if (descriptor >= 0)
|
||||||
{
|
{
|
||||||
Hold_lock hl(*this->lock_);
|
Hold_lock hl(*this->lock_);
|
||||||
|
@ -99,6 +103,8 @@ Descriptors::open(int descriptor, const char* name, int flags, int mode)
|
||||||
pod->stack_next = -1;
|
pod->stack_next = -1;
|
||||||
pod->is_on_stack = false;
|
pod->is_on_stack = false;
|
||||||
}
|
}
|
||||||
|
gold_debug(DEBUG_FILES, "Reused existing descriptor %d for \"%s\"",
|
||||||
|
descriptor, name);
|
||||||
return descriptor;
|
return descriptor;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -128,6 +134,8 @@ Descriptors::open(int descriptor, const char* name, int flags, int mode)
|
||||||
errno = ENOENT;
|
errno = ENOENT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
gold_debug(DEBUG_FILES, "Opened new descriptor %d for \"%s\"",
|
||||||
|
new_descriptor, name);
|
||||||
return new_descriptor;
|
return new_descriptor;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -162,6 +170,8 @@ Descriptors::open(int descriptor, const char* name, int flags, int mode)
|
||||||
if (this->current_ >= this->limit_)
|
if (this->current_ >= this->limit_)
|
||||||
this->close_some_descriptor();
|
this->close_some_descriptor();
|
||||||
|
|
||||||
|
gold_debug(DEBUG_FILES, "Opened new descriptor %d for \"%s\"",
|
||||||
|
new_descriptor, name);
|
||||||
return new_descriptor;
|
return new_descriptor;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -209,6 +219,9 @@ Descriptors::release(int descriptor, bool permanent)
|
||||||
pod->is_on_stack = true;
|
pod->is_on_stack = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
gold_debug(DEBUG_FILES, "Released descriptor %d for \"%s\"",
|
||||||
|
descriptor, pod->name);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Close some descriptor. The lock is held when this is called. We
|
// Close some descriptor. The lock is held when this is called. We
|
||||||
|
@ -233,6 +246,8 @@ Descriptors::close_some_descriptor()
|
||||||
if (::close(i) < 0)
|
if (::close(i) < 0)
|
||||||
gold_warning(_("while closing %s: %s"), pod->name, strerror(errno));
|
gold_warning(_("while closing %s: %s"), pod->name, strerror(errno));
|
||||||
--this->current_;
|
--this->current_;
|
||||||
|
gold_debug(DEBUG_FILES, "Closed descriptor %d for \"%s\"",
|
||||||
|
i, pod->name);
|
||||||
pod->name = NULL;
|
pod->name = NULL;
|
||||||
if (last < 0)
|
if (last < 0)
|
||||||
this->stack_top_ = pod->stack_next;
|
this->stack_top_ = pod->stack_next;
|
||||||
|
@ -265,6 +280,8 @@ Descriptors::close_all()
|
||||||
{
|
{
|
||||||
if (::close(i) < 0)
|
if (::close(i) < 0)
|
||||||
gold_warning(_("while closing %s: %s"), pod->name, strerror(errno));
|
gold_warning(_("while closing %s: %s"), pod->name, strerror(errno));
|
||||||
|
gold_debug(DEBUG_FILES, "Closed descriptor %d for \"%s\" (close_all)",
|
||||||
|
static_cast<int>(i), pod->name);
|
||||||
pod->name = NULL;
|
pod->name = NULL;
|
||||||
pod->stack_next = -1;
|
pod->stack_next = -1;
|
||||||
pod->is_on_stack = false;
|
pod->is_on_stack = false;
|
||||||
|
|
|
@ -293,6 +293,7 @@ void
|
||||||
File_read::lock(const Task* task)
|
File_read::lock(const Task* task)
|
||||||
{
|
{
|
||||||
gold_assert(this->released_);
|
gold_assert(this->released_);
|
||||||
|
gold_debug(DEBUG_FILES, "Locking file \"%s\"", this->name_.c_str());
|
||||||
this->token_.add_writer(task);
|
this->token_.add_writer(task);
|
||||||
this->released_ = false;
|
this->released_ = false;
|
||||||
}
|
}
|
||||||
|
@ -302,6 +303,7 @@ File_read::lock(const Task* task)
|
||||||
void
|
void
|
||||||
File_read::unlock(const Task* task)
|
File_read::unlock(const Task* task)
|
||||||
{
|
{
|
||||||
|
gold_debug(DEBUG_FILES, "Unlocking file \"%s\"", this->name_.c_str());
|
||||||
this->release();
|
this->release();
|
||||||
this->token_.remove_writer(task);
|
this->token_.remove_writer(task);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue