1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package io.netty.util.internal;
17
18 import io.netty.util.Recycler;
19 import io.netty.util.ReferenceCountUtil;
20 import io.netty.util.concurrent.Promise;
21 import io.netty.util.internal.ObjectPool.Handle;
22
23
24
25
26 public final class PendingWrite {
27 private static final Recycler<PendingWrite> RECYCLER =
28 new Recycler<PendingWrite>() {
29 @Override
30 protected PendingWrite newObject(Handle<PendingWrite> handle) {
31 return new PendingWrite(handle);
32 }
33 };
34
35
36
37
38 public static PendingWrite newInstance(Object msg, Promise<Void> promise) {
39 PendingWrite pending = RECYCLER.get();
40 pending.msg = msg;
41 pending.promise = promise;
42 return pending;
43 }
44
45 private final Handle<PendingWrite> handle;
46 private Object msg;
47 private Promise<Void> promise;
48
49 private PendingWrite(Handle<PendingWrite> handle) {
50 this.handle = handle;
51 }
52
53
54
55
56 public boolean recycle() {
57 msg = null;
58 promise = null;
59 handle.recycle(this);
60 return true;
61 }
62
63
64
65
66 public boolean failAndRecycle(Throwable cause) {
67 ReferenceCountUtil.release(msg);
68 if (promise != null) {
69 promise.setFailure(cause);
70 }
71 return recycle();
72 }
73
74
75
76
77 public boolean successAndRecycle() {
78 if (promise != null) {
79 promise.setSuccess(null);
80 }
81 return recycle();
82 }
83
84 public Object msg() {
85 return msg;
86 }
87
88 public Promise<Void> promise() {
89 return promise;
90 }
91
92
93
94
95 public Promise<Void> recycleAndGet() {
96 Promise<Void> promise = this.promise;
97 recycle();
98 return promise;
99 }
100 }