~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/smart/server.py

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2008-04-29 15:51:37 UTC
  • mfrom: (3386.1.1 thread-name-suffix)
  • Revision ID: pqm@pqm.ubuntu.com-20080429155137-0w5littcl831pq4m
Add optional thread_name_suffix parameter to
        SmartTCPServer_for_testing. (Andrew Bennetts)

Show diffs side-by-side

added added

removed removed

Lines of Context:
74
74
        self._stopped = threading.Event()
75
75
        self.root_client_path = root_client_path
76
76
 
77
 
    def serve(self):
 
77
    def serve(self, thread_name_suffix=''):
78
78
        self._should_terminate = False
79
79
        # for hooks we are letting code know that a server has started (and
80
80
        # later stopped).
116
116
                        if e.args[0] != errno.EBADF:
117
117
                            trace.warning("listening socket error: %s", e)
118
118
                    else:
119
 
                        self.serve_conn(conn)
 
119
                        self.serve_conn(conn, thread_name_suffix)
120
120
            except KeyboardInterrupt:
121
121
                # dont log when CTRL-C'd.
122
122
                raise
139
139
        """Return the url of the server"""
140
140
        return "bzr://%s:%d/" % self._sockname
141
141
 
142
 
    def serve_conn(self, conn):
 
142
    def serve_conn(self, conn, thread_name_suffix):
143
143
        # For WIN32, where the timeout value from the listening socket
144
144
        # propogates to the newly accepted socket.
145
145
        conn.setblocking(True)
146
146
        conn.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
147
147
        handler = SmartServerSocketStreamMedium(
148
148
            conn, self.backing_transport, self.root_client_path)
149
 
        connection_thread = threading.Thread(None, handler.serve, name='smart-server-child')
 
149
        thread_name = 'smart-server-child' + thread_name_suffix
 
150
        connection_thread = threading.Thread(
 
151
            None, handler.serve, name=thread_name)
150
152
        connection_thread.setDaemon(True)
151
153
        connection_thread.start()
152
154
 
153
 
    def start_background_thread(self):
 
155
    def start_background_thread(self, thread_name_suffix=''):
154
156
        self._started.clear()
155
157
        self._server_thread = threading.Thread(None,
156
 
                self.serve,
 
158
                self.serve, args=(thread_name_suffix,),
157
159
                name='server-' + self.get_url())
158
160
        self._server_thread.setDaemon(True)
159
161
        self._server_thread.start()
213
215
    This server is backed by the process's cwd.
214
216
    """
215
217
 
216
 
    def __init__(self):
 
218
    def __init__(self, thread_name_suffix=''):
217
219
        SmartTCPServer.__init__(self, None)
218
220
        self.client_path_extra = None
 
221
        self.thread_name_suffix = thread_name_suffix
219
222
        
220
223
    def get_backing_transport(self, backing_transport_server):
221
224
        """Get a backing transport from a server we are decorating."""
246
249
        self.backing_transport = transport.get_transport(
247
250
            self.chroot_server.get_url())
248
251
        self.root_client_path = self.client_path_extra = client_path_extra
249
 
        self.start_background_thread()
 
252
        self.start_background_thread(self.thread_name_suffix)
250
253
 
251
254
    def tearDown(self):
252
255
        self.stop_background_thread()