facebook/mariana-trench

Some functions will get stuck when running to `fixpoint.run(AnalysisEnvironment::initial());`

Opened this issue · 3 comments

Bug

In the process of analyzing an app, it is found that only the first round of method analysis is performed, and the next round cannot be entered. Through the observation of the log and debug, it is a function processing thread that is stuck

Interprocedural.cpp
--> auto new_model = analyze(context, registry, old_model);
--> fixpoint.run(AnalysisEnvironment::initial()); (key point)

Solution:
Hope to increase thread timeout at context.scheduler->schedule

Hi @houugen,

In theory, Mariana Trench should always converge during its analysis. If it does not terminate, there is a bug in the analysis.
How long has it been stuck on this function?
How can I reproduce the bug? Could you share the apk?

Hi @houugen,

In theory, Mariana Trench should always converge during its analysis. If it does not terminate, there is a bug in the analysis. How long has it been stuck on this function? How can I reproduce the bug? Could you share the apk?

Sorry, i can't provide apk because of some privacy

stuck here forever
image

The problematic function is BasePlayerImpl;.<init>:(Landroid/content/Context;L../PlayerConfig;)V

public BasePlayerImpl(Context context, PlayerConfig playerConfig) {
    this.x = context;
    this.y = playerConfig;
    this.f.aq = this.y;
    Profile.initProfile("xx", playerConfig.f6908a, context);
    this.f.K = this;
    this.f.I = this;
    this.f.J = this;
    this.f.a((MediaPlayer.OnErrorListener) this);
    this.f.M = this;
    this.f.L = this;
    this.f.N = this;
    this.f.ab = this;
    this.f.Q = this;
    this.f.R = this;
    this.f.S = this;
    this.f.T = this;
    this.f.W = this;
    this.f.U = this;
    this.f.ad = this;
    this.f.Z = this;
    this.f.aa = new OnLoadingStatusListenerNoTrack() { 
        @Override 
        public final void onStartLoading() {
            BasePlayerImpl.this.w();
        }

        @Override 
        public final void onEndLoading() {
            BasePlayerImpl.this.x();
        }
    };
    this.f.O = this;
    this.f.ai = this;
    this.f.X = this;
    this.f.Y = new OnNetworkSpeedPerMinute() { 
        @Override 
        public final void onSpeedUpdate(int i) {
            for (PlayStatisticListener playStatisticListener : BasePlayerImpl.this.h) {
                playStatisticListener.onInfo(2300, i, 0, null, 0L);
            }
        }

        @Override 
        public final void onNetWorkIncome(int i) {
            for (PlayStatisticListener playStatisticListener : BasePlayerImpl.this.h) {
                playStatisticListener.onInfo(60001, i, 0, null, 0L);
            }
        }

        @Override 
        public final void onNetWorkSpeed(Object obj) {
            for (PlayStatisticListener playStatisticListener : BasePlayerImpl.this.h) {
                playStatisticListener.onInfo(60002, 0, 0, obj, 0L);
            }
        }
    };
    this.f.a((BaseMediaPlayer.OnPlayHeartListener) this);
    this.f.ae = this;
    this.f.ag = this;
    this.f.ah = this;
    this.f.ak = this;
    this.f.aj = this;
    this.f.ac = this;
    this.f.al = this;
    this.f.ag = this;
    this.f.V = this;
    this.f.P = this;
    this.f.af = this;
    this.f.am = this;
    this.f.an = this;
    this.f.ao = this;
    this.f.H = this;
    this.f.A = new DefaultDataSourceProcessor();
    BaseMediaPlayer baseMediaPlayer = this.f;
    int i = playerConfig.e;
    if (i == 1) {
        baseMediaPlayer.t = true;
    } else if (i == 3) {
        baseMediaPlayer.B = true;
    } else if (i == 2) {
        baseMediaPlayer.t = true;
        baseMediaPlayer.B = true;
    }
}