+++ /dev/null
-From 556a351de83fc6f401b02213dae95731553c216d Mon Sep 17 00:00:00 2001
-From: Loïc Minier <lool@dooz.org>
-Date: Mon, 24 Mar 2008 19:38:27 +0000
-Subject: Bug #10489: Don't retry unix socket connect()s on ENOENT.
-
-If the socket isn't there, it's not gonna magically appear. Either it's
-a server socket and you should have just waited for the SIGUSR1 from the
-server, or it's a stale reference to an ICE socket.
-
-However, do retry once, so fallback from abstract to filesystem namespace
-works.
-
-Originally Debian bug #385976.
----
-diff --git a/Xtranssock.c b/Xtranssock.c
-index 8a7d2ec..da4afe9 100644
---- a/Xtranssock.c
-+++ b/Xtranssock.c
-@@ -2146,8 +2146,13 @@ TRANS(SocketUNIXConnect) (XtransConnInfo ciptr, char *host, char *port)
- errno = olderrno;
-
- /*
-- * If the error was ENOENT, the server may be starting up
-- * and we should try again.
-+ * If the error was ENOENT, the server may be starting up; we used
-+ * to suggest to try again in this case with
-+ * TRANS_TRY_CONNECT_AGAIN, but this introduced problems for
-+ * processes still referencing stale sockets in their environment.
-+ * Hence, we now return a hard error, TRANS_CONNECT_FAILED, and it
-+ * is suggested that higher level stacks handle retries on their
-+ * level when they face a slow starting server.
- *
- * If the error was EWOULDBLOCK or EINPROGRESS then the socket
- * was non-blocking and we should poll using select
-@@ -2161,14 +2166,14 @@ TRANS(SocketUNIXConnect) (XtransConnInfo ciptr, char *host, char *port)
- else if (olderrno == EINTR)
- return TRANS_TRY_CONNECT_AGAIN;
- else if (olderrno == ENOENT) {
-- /*
-- * If opening as abstract socket failed, try again "normally"
-- */
-- if (abstract)
-+ /* If opening as abstract socket failed, try again normally */
-+ if (abstract) {
- ciptr->transptr->flags &= ~(TRANS_ABSTRACT);
-- return TRANS_TRY_CONNECT_AGAIN;
-- }
-- else {
-+ return TRANS_TRY_CONNECT_AGAIN;
-+ } else {
-+ return TRANS_CONNECT_FAILED;
-+ }
-+ } else {
- PRMSG (2,"SocketUNIXConnect: Can't connect: errno = %d\n",
- EGET(),0, 0);
-
---
-cgit v0.7.2-37-g538c
+++ /dev/null
-Work in Progress- This patch breaks output_symbol_bytes
----
- ChangeLog | 9 +++++++++
- libpp/callgraph_container.cpp | 10 ++++++++--
- libpp/callgraph_container.h | 14 ++++++++++----
- libpp/format_output.cpp | 30 +++++++++++++++++++++++++-----
- libpp/format_output.h | 6 +++---
- pp/opreport.cpp | 5 +++--
- pp/opreport_options.cpp | 4 ++--
- 7 files changed, 60 insertions(+), 18 deletions(-)
-
-Index: oprofile1/pp/opreport.cpp
-===================================================================
---- oprofile1.orig/pp/opreport.cpp 2007-05-24 15:32:20.000000000 +0100
-+++ oprofile1/pp/opreport.cpp 2007-05-24 20:07:14.000000000 +0100
-@@ -555,10 +555,11 @@ int opreport(options::spec const & spec)
-
- output_diff_symbols(pc1, pc2, multiple_apps);
- } else if (options::callgraph) {
-- callgraph_container cg_container;
-+ callgraph_container cg_container(options::debug_info,
-+ options::details);
- cg_container.populate(options::archive_path, iprofiles,
- options::extra_found_images,
-- options::debug_info, options::threshold,
-+ options::threshold,
- options::merge_by.lib, options::symbol_filter);
-
- output_cg_symbols(cg_container, multiple_apps);
-Index: oprofile1/ChangeLog
-===================================================================
---- oprofile1.orig/ChangeLog 2007-05-24 18:30:47.000000000 +0100
-+++ oprofile1/ChangeLog 2007-05-24 20:07:14.000000000 +0100
-@@ -1,5 +1,14 @@
- 2007-05-24 Richard Purdie <rpurdie@openedhand.com>
-
-+ * libpp/callgraph_container.cpp:
-+ * libpp/callgraph_container.h:
-+ * libpp/format_output.cpp:
-+ * libpp/format_output.h:
-+ * pp/opreport.cpp:
-+ * pp/opreport_options.cpp: Add callgraph XML detail support
-+
-+2007-05-24 Richard Purdie <rpurdie@openedhand.com>
-+
- * events/arm/xscale1/events:
- * events/arm/xscale2/events: Add extra Xscale PMU event definitions
-
-Index: oprofile1/libpp/callgraph_container.cpp
-===================================================================
---- oprofile1.orig/libpp/callgraph_container.cpp 2007-05-24 15:32:20.000000000 +0100
-+++ oprofile1/libpp/callgraph_container.cpp 2007-05-24 20:07:14.000000000 +0100
-@@ -391,15 +391,21 @@ const symbol_collection & arc_recorder::
- return cg_syms;
- }
-
-+callgraph_container::callgraph_container(bool debug_info, bool need_details)
-+ :
-+ pc(debug_info, need_details),
-+ debug_info(debug_info)
-+{
-+}
-+
-
- void callgraph_container::populate(string const & archive_path,
- list<inverted_profile> const & iprofiles,
-- extra_images const & extra, bool debug_info, double threshold,
-+ extra_images const & extra, double threshold,
- bool merge_lib, string_filter const & sym_filter)
- {
- // non callgraph samples container, we record sample at symbol level
- // not at vma level.
-- profile_container pc(debug_info, false);
-
- list<inverted_profile>::const_iterator it;
- list<inverted_profile>::const_iterator const end = iprofiles.end();
-Index: oprofile1/libpp/callgraph_container.h
-===================================================================
---- oprofile1.orig/libpp/callgraph_container.h 2007-05-24 15:32:20.000000000 +0100
-+++ oprofile1/libpp/callgraph_container.h 2007-05-24 20:07:14.000000000 +0100
-@@ -19,8 +19,8 @@
- #include "symbol.h"
- #include "symbol_functors.h"
- #include "string_filter.h"
-+#include "profile_container.h"
-
--class profile_container;
- class inverted_profile;
- class profile_t;
- class extra_images;
-@@ -103,6 +103,8 @@ private:
- */
- class callgraph_container {
- public:
-+ callgraph_container(bool debug_info, bool need_details);
-+
- /**
- * Populate the container, must be called once only.
- * @param archive_path oparchive prefix path
-@@ -118,9 +120,8 @@ public:
- */
- void populate(std::string const & archive_path,
- std::list<inverted_profile> const & iprofiles,
-- extra_images const & extra, bool debug_info,
-- double threshold, bool merge_lib,
-- string_filter const & sym_filter);
-+ extra_images const & extra, double threshold,
-+ bool merge_lib, string_filter const & sym_filter);
-
- /// return hint on how data must be displayed.
- column_flags output_hint() const;
-@@ -131,6 +132,9 @@ public:
- // return all the cg symbols
- const symbol_collection & get_symbols() const;
-
-+ // profile container callgraph is based on
-+ profile_container pc;
-+
- private:
- /**
- * Record caller/callee for one cg file
-@@ -162,6 +166,8 @@ private:
- profile_container const & pc, bool debug_info,
- bool merge_lib);
-
-+ bool debug_info;
-+
- /// record all main symbols
- void add_symbols(profile_container const & pc);
-
-Index: oprofile1/pp/opreport_options.cpp
-===================================================================
---- oprofile1.orig/pp/opreport_options.cpp 2007-05-24 15:32:20.000000000 +0100
-+++ oprofile1/pp/opreport_options.cpp 2007-05-24 20:07:14.000000000 +0100
-@@ -165,8 +165,8 @@ void check_options(bool diff)
-
- if (callgraph) {
- symbols = true;
-- if (details) {
-- cerr << "--callgraph is incompatible with --details" << endl;
-+ if (details && !xml) {
-+ cerr << "--callgraph is incompatible with --details without --xml" << endl;
- do_exit = true;
- }
-
-Index: oprofile1/libpp/format_output.cpp
-===================================================================
---- oprofile1.orig/libpp/format_output.cpp 2007-05-24 15:32:20.000000000 +0100
-+++ oprofile1/libpp/format_output.cpp 2007-05-24 20:07:14.000000000 +0100
-@@ -594,9 +594,9 @@ xml_formatter::
- xml_formatter(profile_container const * p,
- symbol_collection & s)
- :
-+ need_details(false),
- profile(p),
-- symbols(s),
-- need_details(false)
-+ symbols(s)
- {
- if (profile)
- counts.total = profile->samples_count();
-@@ -673,8 +673,8 @@ void xml_formatter::output_symbol_data(o
- if (name.size() > 0 && name[0] != '?') {
- output_attribute(out, datum, ff_vma, STARTING_ADDR);
-
-- if (need_details)
-- xml_support->output_symbol_bytes(bytes_out, symb, sd_it->second);
-+ //if (need_details)
-+ // xml_support->output_symbol_bytes(bytes_out, symb, sd_it->second);
- }
- out << close_element();
-
-@@ -843,7 +843,7 @@ output_attribute(ostream & out, field_da
- xml_cg_formatter::
- xml_cg_formatter(callgraph_container const * cg, symbol_collection & s)
- :
-- xml_formatter(0, s),
-+ xml_formatter(&cg->pc, s),
- callgraph(cg)
- {
- counts.total = callgraph->samples_count();
-@@ -946,6 +946,26 @@ output_symbol(ostream & out,
-
- out << init_attr(ID_REF, indx);
-
-+ if (need_details) {
-+ ostringstream details;
-+ symbol_details_t & sd = symbol_details[indx];
-+ size_t const detail_lo = sd.index;
-+
-+ string detail_str = output_symbol_details(symb, sd.index, lo, hi);
-+
-+ if (detail_str.size() > 0) {
-+ if (sd.id < 0)
-+ sd.id = indx;
-+ details << detail_str;
-+ }
-+
-+ if (sd.index > detail_lo) {
-+ sd.details = sd.details + details.str();
-+ out << init_attr(DETAIL_LO, detail_lo);
-+ out << init_attr(DETAIL_HI, sd.index-1);
-+ }
-+ }
-+
- out << close_element(NONE, true);
-
- out << open_element(CALLERS);
-Index: oprofile1/libpp/format_output.h
-===================================================================
---- oprofile1.orig/libpp/format_output.h 2007-05-24 15:32:20.000000000 +0100
-+++ oprofile1/libpp/format_output.h 2007-05-24 20:07:14.000000000 +0100
-@@ -249,6 +249,9 @@ public:
- // output SymbolData XML elements
- void output_symbol_data(std::ostream & out);
-
-+ /// true if we need to show details for each symbols
-+ bool need_details;
-+
- private:
- /// container we work from
- profile_container const * profile;
-@@ -256,9 +259,6 @@ private:
- // ordered collection of symbols associated with this profile
- symbol_collection & symbols;
-
-- /// true if we need to show details for each symbols
-- bool need_details;
--
- // count of DetailData items output so far
- size_t detail_count;
-