Failed to allocate CursorWindow '/ pos-db' of size 2097152 due to error -24

Exclusion Information

cannot open file at line 30176 of [00bb9c9ce4] (14) os_unix.c:30176: (24) open(/data/data/c/databases/pos-db-journal) - (14) cannot open file at line 30176 of [00bb9c9ce4] (14) os_unix.c:30176: (24) open(/data/data/c/pos-db-journal) - (14) statement aborts at 14: [SELECT T."_id",T."PRINTDATA",T."POSITION",T."DOUBLEFORMAT", T."PRINTERMODE",T."INSERTTIME" FROM "PRINT_DATA_ITEM" T] unable to open database file E/SQLiteQuery: exception: unable to open database file (code 14); query: SELECT T."_id",T. "PRINTDATA",T."POSITION",T."DOUBLEFORMAT",T."PRINTERMODE",T."INSERTTIME" FROM "PRINT_DATA_ITEM" T 

part code:

  private PrinterTask(Context context) { this.mContext = context; helper = new DaoMaster.DevOpenHelper(context, "pos-db", null); db = helper.getWritableDatabase(); mDaoMaster = new DaoMaster(db); mDaoSession = mDaoMaster.newSession(); mPrintDataItemDao = mDaoSession.getPrintDataItemDao(); mRequestDataItemDao = mDaoSession.getRequestDataItemDao(); } // public void startPrintThread() { dataIsExist = true; // if (!threadIsRuning) { thread = new Thread() { @Override public void run() { super.run(); threadIsRuning = true; List<PrintDataItem> list; while (dataIsExist) { list = mPrintDataItemDao.loadAll(); if (list != null && list.size() > 0) { KLog.d("startPrintThread", String.valueOf(++count) + " " + String.valueOf(list.size())); } threadIsRuning = false; } }; thread.start(); } 

when a counter is added to approximately 600,000, the application will exist without any omen. then logcat displays this information.

log output:

 (1)Could not create epoll instance. errno=242)CursorWindow(26673): Could not allocate CursorWindow of size 2097152 due to error -243)F/Looper (26673): Could not create wake pipe. errno=24 I/qtaguid (20825): Failed write_ctrl(s 0 10051) res=-1 errno=1 FATAL EXCEPTION: Thread-118`enter code here` 

what can i solve this problem? I will be grateful!

+5
source share
1 answer

This code is OK. I find other code is loading this exception. I use intentservice and AlarmManager for cyclical maintenance. I refuse the AlarmManager. Then change the code as follows: It works. An exception is no longer displayed.

 new Thread(new Runnable() { @Override public void run() { mRequestDataItem = DBHelper.getInstance(getApplicationContext()).getTopFailedNetRequestInDataBase(); while (isRunning) { CommonUtilLog.d("reRequestTask Loop", String.valueOf(countLoop++)); if (!isPosting) { if (reRequestTask == null) { if (mRequestDataItem != null) { CommonUtilLog.d("reRequestTask", String.valueOf(count++)); reRequestTask = new ReRequestTask(mRequestDataItem); } } } try { Thread.sleep(CommonConstant.THREAD_SLEEP_RETRY_REQUEST_SERVICE); } catch (InterruptedException e) { e.printStackTrace(); } mRequestDataItem = DBHelper.getInstance(getApplicationContext()).getTopFailedNetRequestInDataBase(); } } }).start(); 

way to find the problem: 来自 这篇 博客 的 博 主: http://ju.outofmemory.cn/entry/247095 "差异 法", 逐步 注释 代码, 找出 出错 的 真凶.

+1
source

Source: https://habr.com/ru/post/1246039/


All Articles