)]}'
{"service/java/com/android/server/wifi/HalDeviceManager.java":[{"author":{"_account_id":18205,"name":"Alessandro Astone","email":"ales.astone@gmail.com","username":"YoDevil","avatars":[{"url":"https://www.gravatar.com/avatar/61b8bcab7b164d13b5e9461718f72b62.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/61b8bcab7b164d13b5e9461718f72b62.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/61b8bcab7b164d13b5e9461718f72b62.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/61b8bcab7b164d13b5e9461718f72b62.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"d09096073a0fe7471f5691a5a29c77259529f5be","unresolved":true,"context_lines":[{"line_number":1412,"context_line":"            Log.d(TAG, \"createIfaceIfPossible: chipInfos\u003d\" + Arrays.deepToString(chipInfos)"},{"line_number":1413,"context_line":"                    + \", ifaceType\u003d\" + ifaceType + \", lowPriority\u003d\" + lowPriority);"},{"line_number":1414,"context_line":"        }"},{"line_number":1415,"context_line":"        synchronized (mLock) {"},{"line_number":1416,"context_line":"            IfaceCreationData bestIfaceCreationProposal \u003d null;"},{"line_number":1417,"context_line":"            for (WifiChipInfo chipInfo: chipInfos) {"},{"line_number":1418,"context_line":"                for (IWifiChip.ChipMode chipMode: chipInfo.availableModes) {"},{"line_number":1419,"context_line":"                    for (IWifiChip.ChipIfaceCombination chipIfaceCombo : chipMode"},{"line_number":1420,"context_line":"                            .availableCombinations) {"},{"line_number":1421,"context_line":"                        int[][] expandedIfaceCombos \u003d expandIfaceCombos(chipIfaceCombo);"},{"line_number":1422,"context_line":"                        if (VDBG) {"},{"line_number":1423,"context_line":"                            Log.d(TAG, chipIfaceCombo + \" expands to \""},{"line_number":1424,"context_line":"                                    + Arrays.deepToString(expandedIfaceCombos));"},{"line_number":1425,"context_line":"                        }"},{"line_number":1426,"context_line":""},{"line_number":1427,"context_line":"                        for (int[] expandedIfaceCombo: expandedIfaceCombos) {"},{"line_number":1428,"context_line":"                            IfaceCreationData currentProposal \u003d canIfaceComboSupportRequest("},{"line_number":1429,"context_line":"                                    chipInfo, chipMode, expandedIfaceCombo, ifaceType, lowPriority);"},{"line_number":1430,"context_line":"                            if (compareIfaceCreationData(currentProposal,"},{"line_number":1431,"context_line":"                                    bestIfaceCreationProposal)) {"},{"line_number":1432,"context_line":"                                if (VDBG) Log.d(TAG, \"new proposal accepted\");"},{"line_number":1433,"context_line":"                                bestIfaceCreationProposal \u003d currentProposal;"},{"line_number":1434,"context_line":"                            }"},{"line_number":1435,"context_line":"                        }"},{"line_number":1436,"context_line":"                    }"},{"line_number":1437,"context_line":"                }"},{"line_number":1438,"context_line":"            }"},{"line_number":1439,"context_line":""},{"line_number":1440,"context_line":"            if (bestIfaceCreationProposal !\u003d null) {"},{"line_number":1441,"context_line":"                IWifiIface iface \u003d executeChipReconfiguration(bestIfaceCreationProposal, ifaceType);"},{"line_number":1442,"context_line":"                if (iface !\u003d null) {"},{"line_number":1443,"context_line":"                    InterfaceCacheEntry cacheEntry \u003d new InterfaceCacheEntry();"},{"line_number":1444,"context_line":""},{"line_number":1445,"context_line":"                    cacheEntry.chip \u003d bestIfaceCreationProposal.chipInfo.chip;"},{"line_number":1446,"context_line":"                    cacheEntry.chipId \u003d bestIfaceCreationProposal.chipInfo.chipId;"},{"line_number":1447,"context_line":"                    cacheEntry.name \u003d getName(iface);"},{"line_number":1448,"context_line":"                    cacheEntry.type \u003d ifaceType;"},{"line_number":1449,"context_line":"                    if (destroyedListener !\u003d null) {"},{"line_number":1450,"context_line":"                        cacheEntry.destroyedListeners.add("},{"line_number":1451,"context_line":"                                new InterfaceDestroyedListenerProxy("},{"line_number":1452,"context_line":"                                        cacheEntry.name, destroyedListener, handler));"},{"line_number":1453,"context_line":"                    }"},{"line_number":1454,"context_line":"                    cacheEntry.creationTime \u003d mClock.getUptimeSinceBootMillis();"},{"line_number":1455,"context_line":"                    cacheEntry.isLowPriority \u003d lowPriority;"},{"line_number":1456,"context_line":""},{"line_number":1457,"context_line":"                    if (mDbg) Log.d(TAG, \"createIfaceIfPossible: added cacheEntry\u003d\" + cacheEntry);"},{"line_number":1458,"context_line":"                    synchronized (mLock) {"},{"line_number":1459,"context_line":"                        mInterfaceInfoCache.put("},{"line_number":1460,"context_line":"                                Pair.create(cacheEntry.name, cacheEntry.type), cacheEntry);"},{"line_number":1461,"context_line":"                    }"},{"line_number":1462,"context_line":"                    return iface;"},{"line_number":1463,"context_line":"                }"},{"line_number":1464,"context_line":"            }"},{"line_number":1465,"context_line":"        }"},{"line_number":1466,"context_line":""},{"line_number":1467,"context_line":"        return null;"},{"line_number":1468,"context_line":"    }"}],"source_content_type":"text/x-java","patch_set":5,"id":"d968bee9_7516c859","line":1465,"range":{"start_line":1415,"start_character":0,"end_line":1465,"end_character":9},"updated":"2020-08-14 16:35:43.000000000","message":"the whole block is synchronized already","commit_id":"b73184ac9332354c72c928524393539ca3458104"},{"author":{"_account_id":11883,"name":"Luca Stefani","email":"luca.stefani.ge1@gmail.com","username":"luca020400","avatars":[{"url":"https://www.gravatar.com/avatar/e0d7fe321be897bf85cf3d240cbd3be9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/e0d7fe321be897bf85cf3d240cbd3be9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/e0d7fe321be897bf85cf3d240cbd3be9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/e0d7fe321be897bf85cf3d240cbd3be9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"75a306b1b0b756084e5fd80a9e4b66ac690b14f8","unresolved":true,"context_lines":[{"line_number":2057,"context_line":"    private void dispatchAllDestroyedListeners() {"},{"line_number":2058,"context_line":"        if (VDBG) Log.d(TAG, \"dispatchAllDestroyedListeners\");"},{"line_number":2059,"context_line":""},{"line_number":2060,"context_line":"        synchronized (mLock) {"},{"line_number":2061,"context_line":"            Iterator\u003cMap.Entry\u003cPair\u003cString, Integer\u003e, InterfaceCacheEntry\u003e\u003e it \u003d"},{"line_number":2062,"context_line":"                    mInterfaceInfoCache.entrySet().iterator();"},{"line_number":2063,"context_line":"            while (it.hasNext()) {"}],"source_content_type":"text/x-java","patch_set":5,"id":"945f1f6f_f14de46b","line":2060,"updated":"2020-08-14 16:39:26.000000000","message":"the crash happens here, but it\u0027s too under a lock","commit_id":"b73184ac9332354c72c928524393539ca3458104"},{"author":{"_account_id":18205,"name":"Alessandro Astone","email":"ales.astone@gmail.com","username":"YoDevil","avatars":[{"url":"https://www.gravatar.com/avatar/61b8bcab7b164d13b5e9461718f72b62.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/61b8bcab7b164d13b5e9461718f72b62.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/61b8bcab7b164d13b5e9461718f72b62.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/61b8bcab7b164d13b5e9461718f72b62.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"d09096073a0fe7471f5691a5a29c77259529f5be","unresolved":true,"context_lines":[{"line_number":2307,"context_line":"     * Dump the internal state of the class."},{"line_number":2308,"context_line":"     */"},{"line_number":2309,"context_line":"    public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {"},{"line_number":2310,"context_line":"        pw.println(\"HalDeviceManager:\");"},{"line_number":2311,"context_line":"        pw.println(\"  mServiceManager: \" + mServiceManager);"},{"line_number":2312,"context_line":"        pw.println(\"  mWifi: \" + mWifi);"},{"line_number":2313,"context_line":"        pw.println(\"  mManagerStatusListeners: \" + mManagerStatusListeners);"},{"line_number":2314,"context_line":"        pw.println(\"  mInterfaceAvailableForRequestListeners: \""},{"line_number":2315,"context_line":"                + mInterfaceAvailableForRequestListeners);"},{"line_number":2316,"context_line":"        synchronized (mLock) {"},{"line_number":2317,"context_line":"            pw.println(\"  mInterfaceInfoCache: \" + mInterfaceInfoCache);"},{"line_number":2318,"context_line":"        }"},{"line_number":2319,"context_line":"    }"},{"line_number":2320,"context_line":"}"}],"source_content_type":"text/x-java","patch_set":5,"id":"b7ae3f4c_0a164262","line":2319,"range":{"start_line":2310,"start_character":0,"end_line":2319,"end_character":5},"updated":"2020-08-14 16:35:43.000000000","message":"synchronize the whole method?\nglancing through the class, mLock guards all other variables too","commit_id":"b73184ac9332354c72c928524393539ca3458104"},{"author":{"_account_id":18205,"name":"Alessandro Astone","email":"ales.astone@gmail.com","username":"YoDevil","avatars":[{"url":"https://www.gravatar.com/avatar/61b8bcab7b164d13b5e9461718f72b62.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/61b8bcab7b164d13b5e9461718f72b62.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/61b8bcab7b164d13b5e9461718f72b62.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/61b8bcab7b164d13b5e9461718f72b62.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"6dda8e0f584808d5695d68a16c8c990083d823f4","unresolved":true,"context_lines":[{"line_number":2316,"context_line":"        synchronized (mLock) {"},{"line_number":2317,"context_line":"            pw.println(\"  mInterfaceInfoCache: \" + mInterfaceInfoCache);"},{"line_number":2318,"context_line":"        }"},{"line_number":2319,"context_line":"    }"},{"line_number":2320,"context_line":"}"}],"source_content_type":"text/x-java","patch_set":5,"id":"f3aa63eb_63fdcbc3","line":2319,"in_reply_to":"5e2e4207_a4234cbe","updated":"2020-08-14 16:48:48.000000000","message":"AbstractMap\u003c\u003e implements toString() with iterator, which throws ConcurrentModificationException when removing while iterating\n\nBut is the exception actually thrown while dumping?","commit_id":"b73184ac9332354c72c928524393539ca3458104"},{"author":{"_account_id":11883,"name":"Luca Stefani","email":"luca.stefani.ge1@gmail.com","username":"luca020400","avatars":[{"url":"https://www.gravatar.com/avatar/e0d7fe321be897bf85cf3d240cbd3be9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/e0d7fe321be897bf85cf3d240cbd3be9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/e0d7fe321be897bf85cf3d240cbd3be9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/e0d7fe321be897bf85cf3d240cbd3be9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"c788ff691804bbd32b358927cf4afdc2387116bc","unresolved":false,"context_lines":[{"line_number":2316,"context_line":"        synchronized (mLock) {"},{"line_number":2317,"context_line":"            pw.println(\"  mInterfaceInfoCache: \" + mInterfaceInfoCache);"},{"line_number":2318,"context_line":"        }"},{"line_number":2319,"context_line":"    }"},{"line_number":2320,"context_line":"}"}],"source_content_type":"text/x-java","patch_set":5,"id":"5e2e4207_a4234cbe","line":2319,"in_reply_to":"b7ae3f4c_0a164262","updated":"2020-08-14 16:37:20.000000000","message":"now that I look at it toString method shouldn\u0027t have any problem when it comes to concurrency","commit_id":"b73184ac9332354c72c928524393539ca3458104"}]}
