Skip to content

Commit cbf2417

Browse files
authored
fix the bug of concurrent usage of toString in TransactionCapsule (#5696)
1 parent baddd4f commit cbf2417

File tree

2 files changed

+20
-2
lines changed

2 files changed

+20
-2
lines changed

chainbase/src/main/java/org/tron/core/capsule/TransactionCapsule.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,6 @@ public class TransactionCapsule implements ProtoCapsule<Transaction> {
102102
@Setter
103103
private TransactionTrace trxTrace;
104104

105-
private StringBuilder toStringBuff = new StringBuilder();
106105
@Getter
107106
@Setter
108107
private long time;
@@ -738,7 +737,7 @@ public Transaction getInstance() {
738737

739738
@Override
740739
public String toString() {
741-
740+
StringBuilder toStringBuff = new StringBuilder();
742741
toStringBuff.setLength(0);
743742
toStringBuff.append("TransactionCapsule \n[ ");
744743

framework/src/test/java/org/tron/core/actuator/utils/TransactionUtilTest.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515
import com.google.protobuf.ByteString;
1616
import java.nio.charset.StandardCharsets;
17+
import java.util.ArrayList;
1718
import java.util.List;
1819
import lombok.extern.slf4j.Slf4j;
1920
import org.junit.Assert;
@@ -431,4 +432,22 @@ public void estimateConsumeBandWidthSizeCorner() {
431432
long actual = TransactionUtil.estimateConsumeBandWidthSize(dps, balance);
432433
Assert.assertEquals(expected, actual);
433434
}
435+
436+
@Test
437+
public void testConcurrentToString() throws InterruptedException {
438+
Transaction.Builder builder = Transaction.newBuilder();
439+
TransactionCapsule trx = new TransactionCapsule(builder.build());
440+
List<Thread> threadList = new ArrayList<>();
441+
int n = 10;
442+
for (int i = 0; i < n; i++) {
443+
threadList.add(new Thread(() -> trx.toString()));
444+
}
445+
for (int i = 0; i < n; i++) {
446+
threadList.get(i).start();
447+
}
448+
for (int i = 0; i < n; i++) {
449+
threadList.get(i).join();
450+
}
451+
Assert.assertTrue(true);
452+
}
434453
}

0 commit comments

Comments
 (0)