#fixed code
                                @Override
    public void run() {

        if (redis == null) {
            return;
        }

        Long result = null;

        for (int i = 0; i < 5; i++) {

            Long setTimeMillis = System.currentTimeMillis();
            result = redis.setnx(key, setTimeMillis);

            //error
            if (result == null) {
                quietSleep();
            }

            //setnx fail
            else if (result == 0) {
                Long saveTimeMillis = redis.get(key);
                if (saveTimeMillis == null) {
                    reset();
                }
                long ttl = System.currentTimeMillis() - saveTimeMillis;
                if (ttl > expire) {
                    //防止死锁
                    reset();
                }

                // 休息 2 秒钟，重新去抢，因为可能别的应用执行失败了
                quietSleep();

            }

            //set success
            else if (result == 1) {
                break;
            }
        }

        //抢了5次都抢不到，证明已经被别的应用抢走了
        if (result == null || result == 0) {
            return;
        }


        try {

            if (runnable != null) {
                runnable.run();
            } else {
                boolean runSuccess = execute();

                //run()执行失败，让别的分布式应用APP去执行
                //如果run()执行的时间很长（超过30秒）,那么别的分布式应用可能也抢不到了，只能等待下次轮休
                //作用：故障转移
                if (!runSuccess) {
                    reset();
                }
            }
        }

        // 如果 run() 执行异常，让别的分布式应用APP去执行
        // 作用：故障转移
        catch (Throwable ex) {
            LOG.error(ex.toString(), ex);
            reset();
        }
    }
#vulnerable code 
                                @Override
    public void run() {
        Long result = null;

        for (int i = 0; i < 6; i++) {

            result = redis.setnx(key, "locked");

            //error
            if (result == null) {
                quietSleep();
            }

            //setnx fail
            else if (result == 0) {
                Long ttl = redis.ttl(key);
                if (ttl == null || ttl <= 0 || ttl > expire) {
                    //防止死锁
                    reset();
                } else {
                    // 休息 2 秒钟，重新去抢，因为可能别的设置好后，但是却执行失败了
                    quietSleep();
                }
            }

            //set success
            else if (result == 1) {
                break;
            }
        }


        //抢了5次都抢不到，证明已经被别的应用抢走了
        if (result == null || result == 0) {
            return;
        }

        //抢到了，但是设置超时时间设置失败，删除后，让分布式的其他app去抢
        Long expireResult = redis.expire(key, 50);
        if (expireResult == null && expireResult <= 0) {
            reset();
            return;
        }

        try {
            boolean runSuccess = execute();

            //run()执行失败，让别的分布式应用APP去执行
            //如果run()执行的时间很长（超过30秒）,那么别的分布式应用可能也抢不到了，只能等待下次轮休
            //作用：故障转移
            if (!runSuccess) {
                reset();
            }
        }

        // 如果 run() 执行异常，让别的分布式应用APP去执行
        // 作用：故障转移
        catch (Throwable ex) {
            LOG.error(ex.toString(), ex);
            reset();
        }
    } 
                            #location 40 
                            #vulnerability type NULL_DEREFERENCE