~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/smart/server.py

  • Committer: Martin Pool
  • Date: 2008-05-02 02:31:14 UTC
  • mfrom: (3399 +trunk)
  • mto: (3408.1.1 doc)
  • mto: This revision was merged to the branch mainline in revision 3409.
  • Revision ID: mbp@sourcefrog.net-20080502023114-y2gcg3w3jc770j9m
merge trunk

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()