Mercurial Hosting > luan
comparison src/org/eclipse/jetty/io/ThreadLocalBuffers.java @ 802:3428c60d7cfc
replace jetty jars with source
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Wed, 07 Sep 2016 21:15:48 -0600 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
801:6a21393191c1 | 802:3428c60d7cfc |
---|---|
1 // | |
2 // ======================================================================== | |
3 // Copyright (c) 1995-2014 Mort Bay Consulting Pty. Ltd. | |
4 // ------------------------------------------------------------------------ | |
5 // All rights reserved. This program and the accompanying materials | |
6 // are made available under the terms of the Eclipse Public License v1.0 | |
7 // and Apache License v2.0 which accompanies this distribution. | |
8 // | |
9 // The Eclipse Public License is available at | |
10 // http://www.eclipse.org/legal/epl-v10.html | |
11 // | |
12 // The Apache License v2.0 is available at | |
13 // http://www.opensource.org/licenses/apache2.0.php | |
14 // | |
15 // You may elect to redistribute this code under either of these licenses. | |
16 // ======================================================================== | |
17 // | |
18 | |
19 package org.eclipse.jetty.io; | |
20 | |
21 | |
22 | |
23 /* ------------------------------------------------------------ */ | |
24 /** Abstract Buffer pool. | |
25 * simple unbounded pool of buffers for header, request and response sizes. | |
26 * | |
27 */ | |
28 public class ThreadLocalBuffers extends AbstractBuffers | |
29 { | |
30 /* ------------------------------------------------------------ */ | |
31 private final ThreadLocal<ThreadBuffers> _buffers=new ThreadLocal<ThreadBuffers>() | |
32 { | |
33 @Override | |
34 protected ThreadBuffers initialValue() | |
35 { | |
36 return new ThreadBuffers(); | |
37 } | |
38 }; | |
39 | |
40 /* ------------------------------------------------------------ */ | |
41 public ThreadLocalBuffers(Buffers.Type headerType, int headerSize, Buffers.Type bufferType, int bufferSize, Buffers.Type otherType) | |
42 { | |
43 super(headerType,headerSize,bufferType,bufferSize,otherType); | |
44 } | |
45 | |
46 /* ------------------------------------------------------------ */ | |
47 public Buffer getBuffer() | |
48 { | |
49 ThreadBuffers buffers = _buffers.get(); | |
50 if (buffers._buffer!=null) | |
51 { | |
52 Buffer b=buffers._buffer; | |
53 buffers._buffer=null; | |
54 return b; | |
55 } | |
56 | |
57 if (buffers._other!=null && isBuffer(buffers._other)) | |
58 { | |
59 Buffer b=buffers._other; | |
60 buffers._other=null; | |
61 return b; | |
62 } | |
63 | |
64 return newBuffer(); | |
65 } | |
66 | |
67 /* ------------------------------------------------------------ */ | |
68 public Buffer getHeader() | |
69 { | |
70 ThreadBuffers buffers = _buffers.get(); | |
71 if (buffers._header!=null) | |
72 { | |
73 Buffer b=buffers._header; | |
74 buffers._header=null; | |
75 return b; | |
76 } | |
77 | |
78 if (buffers._other!=null && isHeader(buffers._other)) | |
79 { | |
80 Buffer b=buffers._other; | |
81 buffers._other=null; | |
82 return b; | |
83 } | |
84 | |
85 return newHeader(); | |
86 } | |
87 | |
88 /* ------------------------------------------------------------ */ | |
89 public Buffer getBuffer(int size) | |
90 { | |
91 ThreadBuffers buffers = _buffers.get(); | |
92 if (buffers._other!=null && buffers._other.capacity()==size) | |
93 { | |
94 Buffer b=buffers._other; | |
95 buffers._other=null; | |
96 return b; | |
97 } | |
98 | |
99 return newBuffer(size); | |
100 } | |
101 | |
102 /* ------------------------------------------------------------ */ | |
103 public void returnBuffer(Buffer buffer) | |
104 { | |
105 buffer.clear(); | |
106 if (buffer.isVolatile() || buffer.isImmutable()) | |
107 return; | |
108 | |
109 ThreadBuffers buffers = _buffers.get(); | |
110 | |
111 if (buffers._header==null && isHeader(buffer)) | |
112 buffers._header=buffer; | |
113 else if (buffers._buffer==null && isBuffer(buffer)) | |
114 buffers._buffer=buffer; | |
115 else | |
116 buffers._other=buffer; | |
117 } | |
118 | |
119 | |
120 /* ------------------------------------------------------------ */ | |
121 @Override | |
122 public String toString() | |
123 { | |
124 return "{{"+getHeaderSize()+","+getBufferSize()+"}}"; | |
125 } | |
126 | |
127 /* ------------------------------------------------------------ */ | |
128 /* ------------------------------------------------------------ */ | |
129 protected static class ThreadBuffers | |
130 { | |
131 Buffer _buffer; | |
132 Buffer _header; | |
133 Buffer _other; | |
134 } | |
135 } |