Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
houugen opened this issue Dec 16, 2022 · 3 comments

Comments

@houugen
Copy link

houugen commented Dec 16, 2022

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

@arthaud
Copy link
Contributor

arthaud commented Dec 16, 2022

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?

@houugen
Copy link
Author

houugen commented Dec 17, 2022

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;
    }
}

@houugen
Copy link
Author

houugen commented Feb 7, 2023

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants