void webserver_loop() { dmd_log(LOG_INFO, "in function %s, starting webserver main loop.\n", __func__); int serverfd = newSocket(); webserver_serverAddr = newAddress(); bindAddress(serverfd, webserver_serverAddr); listenAddress(serverfd); struct epoll_event events[MAX_EPOLL_EVENT]; int epollfd = newEpollSocket(); dmd_log(LOG_DEBUG, "in function %s, begin to work\n", __func__); addSockfd(epollfd, serverfd); while (1) { int ret = epoll_wait(epollfd, events, MAX_EPOLL_EVENT, -1); dmd_log(LOG_DEBUG, "in function %s, after epoll wait\n", __func__); if (ret < 0) { dmd_log(LOG_ERR, "in function %s, epoll failure\n", __func__); } else { handleEvent(epollfd, serverfd, events, ret); } } // while closeSocket(serverfd); releaseAddress(webserver_serverAddr); }
/**---------------------------------------------------- * @brief dataSet 型の解放関数 * @note address、data に関しては free をする。 * type は DATATYPE_INVALID にて初期化。 * num は INT_MAX にて初期化を行います。 * @param[out] dataSet_ データを解放したいもの *---------------------------------------------------*/ void releaseReciprocateData(ReciprocateData* reciprocateData_) { releaseAddress(reciprocateData_); free(reciprocateData_->data); reciprocateData_->type = DATATYPE_INVALID; reciprocateData_->num = INT_MAX; }
/* virtual */ SysStatus FRPA::startPutPage(uval physAddr, uval objOffset, IORestartRequests *rr) { uval size, addr; SysStatus rc; if (objOffset >= filelen) { // the page may be dirty, but it's not part of the file // anymore so we don't do anything #ifdef DEBUGGING_PAST_ENDFILE tassertMsg(0, "FIXME: ignoring page past eof: objOffset=%ld, " "filelen=%ld\n", objOffset, filelen); #endif /* #ifdef DEBUGGING_PAST_ENDFILE */ // tell the fcm this IO is complete DREF(fcmRef)->ioComplete(objOffset, 0); return 0; } size = PAGE_SIZE; if (size > (filelen-objOffset)) { size = filelen-objOffset; } FetchAndAddSignedVolatile(&outstanding, 1); // FIXME, pass in blocking info here... rc = convertAddressWriteTo(physAddr, addr, rr); tassertMsg(_SUCCESS(rc), "rc 0x%lx\n", rc); if (kptref) { if (rr == NULL) { // not restarting requests rc = DREF(kptref)->startWrite(fileToken, addr, objOffset, size); tassertMsg(_SUCCESS(rc), "woops\n"); } else { rc = DREF(kptref)->tryStartWrite(fileToken, addr, objOffset, size, rr); if (_FAILURE(rc)) { passertMsg((_SCLSCD(rc) == FR::WOULDBLOCK), "woops\n"); // release the page releaseAddress(addr); // decrement outstanding count FetchAndAddSignedVolatile(&outstanding, -1); } } } else { rc = stubFile->_startWrite(addr, objOffset, size); uval interval = 20000; while (_FAILURE(rc) && (_SGENCD(rc) == EBUSY) && (interval < 200000000000UL)) { Scheduler::DelayUntil(interval, TimerEvent::relative); rc = stubFile->_startWrite(addr, objOffset, size); interval = interval * 10; } passertMsg(_SUCCESS(rc), "timed out trying to send to file system\n"); } return rc; }