View | Details | Raw Unified | Return to bug 55827
Collapse All | Expand All

(-)a/src/core/src/main/java/org/apache/jmeter/testelement/AbstractTestElement.java (+39 lines)
Lines 25-31 import java.util.LinkedHashMap; Link Here
25
import java.util.LinkedHashSet;
25
import java.util.LinkedHashSet;
26
import java.util.List;
26
import java.util.List;
27
import java.util.Map;
27
import java.util.Map;
28
import java.util.Objects;
28
import java.util.Set;
29
import java.util.Set;
30
import java.util.concurrent.ConcurrentSkipListSet;
29
31
30
import org.apache.jmeter.gui.Searchable;
32
import org.apache.jmeter.gui.Searchable;
31
import org.apache.jmeter.testelement.property.BooleanProperty;
33
import org.apache.jmeter.testelement.property.BooleanProperty;
Lines 42-47 import org.apache.jmeter.testelement.property.StringProperty; Link Here
42
import org.apache.jmeter.testelement.property.TestElementProperty;
44
import org.apache.jmeter.testelement.property.TestElementProperty;
43
import org.apache.jmeter.threads.JMeterContext;
45
import org.apache.jmeter.threads.JMeterContext;
44
import org.apache.jmeter.threads.JMeterContextService;
46
import org.apache.jmeter.threads.JMeterContextService;
47
import org.jetbrains.annotations.NotNull;
45
import org.slf4j.Logger;
48
import org.slf4j.Logger;
46
import org.slf4j.LoggerFactory;
49
import org.slf4j.LoggerFactory;
47
50
Lines 67-72 public abstract class AbstractTestElement implements TestElement, Serializable, Link Here
67
70
68
    private transient String threadName = null;
71
    private transient String threadName = null;
69
72
73
    private transient ConcurrentSkipListSet<ComparableThread> currentThreads = new ConcurrentSkipListSet<>();
74
70
    @Override
75
    @Override
71
    public Object clone() {
76
    public Object clone() {
72
        try {
77
        try {
Lines 502-507 public abstract class AbstractTestElement implements TestElement, Serializable, Link Here
502
     */
507
     */
503
    @Override
508
    @Override
504
    public void recoverRunningVersion() {
509
    public void recoverRunningVersion() {
510
        ComparableThread currentThread = new ComparableThread(Thread.currentThread());
511
        currentThreads.add(currentThread);
512
        if (currentThreads.size() > 1) {
513
            log.warn("Recover in different threads: {}; Element: {}",
514
                    currentThreads, this,
515
                    new RuntimeException("Thread mismatch"));
516
        }
505
        Iterator<Map.Entry<String, JMeterProperty>>  iter = propMap.entrySet().iterator();
517
        Iterator<Map.Entry<String, JMeterProperty>>  iter = propMap.entrySet().iterator();
506
        while (iter.hasNext()) {
518
        while (iter.hasNext()) {
507
            Map.Entry<String, JMeterProperty> entry = iter.next();
519
            Map.Entry<String, JMeterProperty> entry = iter.next();
Lines 514-521 public abstract class AbstractTestElement implements TestElement, Serializable, Link Here
514
            }
526
            }
515
        }
527
        }
516
        emptyTemporary();
528
        emptyTemporary();
529
        try {
530
            Thread.sleep(500);
531
        } catch (InterruptedException e) {
532
            // nothing to do
533
        }
534
        currentThreads.remove(currentThread);
517
    }
535
    }
518
536
537
    private static class ComparableThread extends Thread implements Comparable {
538
        final Thread t;
539
        ComparableThread(Thread t) {
540
            this.t = t;
541
        }
542
543
        @Override
544
        public int hashCode() {
545
            return t.hashCode();
546
        }
547
548
        @Override
549
        public int compareTo(@NotNull Object o) {
550
            return this.t.getName().compareTo(((ComparableThread) o).t.getName()) ;
551
        }
552
553
        @Override
554
        public boolean equals(Object o) {
555
            return o instanceof ComparableThread && compareTo((ComparableThread) o) == 0;
556
        }
557
    }
519
    /**
558
    /**
520
     * Clears temporaryProperties
559
     * Clears temporaryProperties
521
     */
560
     */

Return to bug 55827