1) old-style apps with graphics in main program.
No one should be using these anymore.
2) writing init_data.xml in boinc_finish().
This was used by deprecated "compound app" scheme
- scheduler: if request reports results that were previously reported,
that's evidence that the previous reply was not received by client.
It may have contained results.
So set a "resend lost results" flag.
svn path=/trunk/boinc/; revision=22203
This file originally used code from the following tutorial,
which shows how to open a window using GLUT:
http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=01
The code has now been completely rewritten;
in particular, it doesn't use GLUT anymore.
- scheduler: change default limit on #CPUs from 16 to 64
svn path=/trunk/boinc/; revision=21784
when they were suspended without "leave in memory" pref
- user web: if in-progress result has credit, show it; fixes#998
svn path=/trunk/boinc/; revision=21748
to restart app for 10 minutes.
Hopefully what will happen is:
- another instance of app is running in slot dir
(shouldn't happen, but sometimes does)
- that app will eventually finish, and will write
a checkpoint file saying so.
It will call boinc_finish(0), but the client won't notice
that it has exited.
- the next time the client starts the app,
it will acquire lock, see that it's done,
and call boinc_finish(0).
This time the client will notice,
and the job will be reported as correct.
The downside to all this is that the client won't know
that the CPU is in use, and will schedule NCPUS jobs.
svn path=/trunk/boinc/; revision=20128
This is like boinc_init() but for multithread apps.
Unlike boinc_init(), it suspends/resumes all threads in the app,
not just one.
In Unix, this is done by forking,
and having the parent process handle suspend/resume messages
and suspend/resume the child using signals
On Win, there's some nasty code that enumerates all
threads in the whole system, and suspends/resumes
those in a particular process.
svn path=/trunk/boinc/; revision=20054
This exits the app with status zero and no finish file,
so the client will restart it.
It creates a file "temporary_exit" containing dt.
The (new) client reads this file and will postpone
scheduling the job again for dt seconds.
Old clients will treat it as a premature exit,
and potentially try to reschedule the job immediately.
This function is intended for GPU applications that
fail to allocate GPU RAM,
presumably because a non-GPU application has it allocated.
We don't want the job to fail,
and we want to wait for a while before trying the allocation again.
svn path=/trunk/boinc/; revision=19879
These cause problems when "read" is a member name, etc.
Do these #defines, conditioned on _MSC_VER,
in the files that actually need them.
- don't include boinc_win.h from parse.h.
principle of minimal inclusion
svn path=/trunk/boinc/; revision=18902
don't use the variable name "sgi";
include <xxx.h> instead of <cxxx>; the latter just adds
overloaded functions that we avoid.
svn path=/trunk/boinc/; revision=17954
want to grant approximately fixed credits, but don't want to express them in
terms of FPOPS and IOPS. This API just calls boinc_ops_cumulative(N*8.64000e+11,0).
CPU intensive projects that use this API should still use the
tools/calculate_credit_multiplier script in order to adjust their credit
claims as processing times vary.
svn path=/trunk/boinc/; revision=17743
i.e., list both win/x86 and win/x86 + NVIDIA.
This will allow the manager to show which projects can
use the hosts's coprocessors,
and also graying out projects that require an absent coproc.
- fix compile warnings
svn path=/trunk/boinc/; revision=17735
time of day and process ID.
This should prefix all messages written to stderr
by applications or by the runtime system.
svn path=/trunk/boinc/; revision=17687
which of those files to include
- Modified MAC address check to work on some non-Linux unixes.
(mac_address.cpp)
- Added suggested change to "already attached to project" checking.
(ProjectInfoPage.cpp)
- changed includes of standard c header files to their c++ equivalents
(i.e. replaced <stdio.h> with <cstdio>) for namespace protection.
- replaced "using namespace std;" with more explicit "using std::function" in
several files.
- Fixed bug in checking whether the os is OS/2 and added conditional OS_OS2
to the build environment. (boinc_platform.m4,configure.ac)
- Changed build environment to not use -nostandardlibs unless we are using
G++ and static linkage is specified. (configure.ac)
- Added makefiles and package building files for solaris CSW package manager.
- Fixed bug with attempting to find login name using logname. (configure.ac)
- Added ifdef HAVE_* protection around some include files commonly found in
sys.
- Added support for unified binary for x86_64/i686-pc-solaris.
(cs_platforms.cpp)
- generate_host_cpid() now uses MAC address on non-linux unix.
(hostinfo_network.cpp)
- Macro BOINC_SET_COMPILE_FLAGS now doesn't check gcc only flags on non-gcc
compilers. (boinc_set_compile_flags.m4)
- Library compiles no longer depend upon the library extension or require
the library to be prefixed with lib.
- More fixes for fcgi builds.
- Added declaration of "struct ether_addr" and ether_ntoa(). Have not yet
implemented ether_ntoa() for machines that don't have it, or where it is
buggy. (unix_util.h)
- Added FCGI::perror() which calls FCGI_perror(). (boinc_fcgi.{h,cpp})
- Fixed library Makefiles so that all required headers get installed.
svn path=/trunk/boinc/; revision=17388
this gets called when the op fails, either at initialization or later on;
it clears the project's sched_rpc_pending flag if needed.
This fixes a bug that caused user-requested RPCs to retry every 10 seconds
when the network is down.
- client: if debt-adjust period is too long, reset accounting.
Otherwise we'll get this infinitely.
- API: all optional alpha argument to TEXTURE_DESC::draw()
svn path=/trunk/boinc/; revision=17195
- Update to libtool 1.5.24
- build environment: Major automake changes that I've been warning about
for some time.
- Now uses libtool to build libraries.
- Builds separate boinc_fcgi and sched_fcgi libraries for use with
FCGI server components.
- New macro "BOINC_CHECK_LIB_WITH" that executes a "AC_CHECK_LIB" on
a library only if --with-libname[=DIR] is specified on the configure
command line. This is to allow inclusion of libraries when the
ssl, gtk, wxWidgets, or other configuration is incorrect for static
libraries.
- Added a lot of "--with-*" for some libraries that might be required for
static builds.
- The sea directory has been moved to packages/generic. Changes to sea
and the associated scripts might be required to better make use of the
staging mechanism and shared libraries.
- Fixed includes of boinc_fcgi.h in many files.
- Fixed places where FCGI_FILE needs to be used implicitly.
- Fixed missing define of _SC_PAGESIZE on hosts that define only
_SC_PAGE_SIZE.
- Moved build of boinc_cmd (and source file) from lib to client
svn path=/trunk/boinc/; revision=16904
- web: check whether to show profile in separate function
from displaying profile; eliminate double headers
- scheduler: finish purge of redundant arguments
svn path=/trunk/boinc/; revision=16726
- API: use non-verbose option to zip
- scheduler: if multiple_client_per_host is set,
don't mark results as over if get repeat CPID
svn path=/trunk/boinc/; revision=16445
we're the main program (otherwise we didn't lock it in
the first place, and a crash results). From Artyom Sharov.
- scheduler: add support for the GCL simulator,
which uses special versions of backend programs
that use virtual time,
and that wait for signals instead of sleep()ing.
To compile:
make clean
configure CXXFLAGS="-DGCL_SIMULATOR"
make
svn path=/trunk/boinc/; revision=16038
- SAMPLES: Add all the samples to the BOINC solution and delete the
old solution.
- LIB: Clean up a bunch of warnings.
api/
texfont.C
lib/
crypt.C
lib/
filesys.C
samples/wrapper/
wrapper.C
win_build/
boinc.sln
glut.vcproj
image_libs.vcproj
jpeglib.vcproj
libboinc_staticcrt.vcproj
libboincapi.vcproj
libboincapi_staticcrt.vcproj
libgraphics2.vcproj
multi_thread.vcproj
sleeper.vcproj
uc2.vcproj
uc2_graphics.vcproj
upper_case.vcproj
worker.vcproj
wrapper.vcproj
svn path=/trunk/boinc/; revision=15819
- scheduler: fix bug in adaptive replication:
if send an unreplicated job to untrusted host,
set both wu.target_nresults and wu.min_quorum to app.target_nresults.
svn path=/trunk/boinc/; revision=15762
Otherwise, in compound apps we'll have both monitor and worker
reading the messages; this is a race condition
and will lead to spurious "no heartbeat" exits.
svn path=/trunk/boinc/; revision=15548
mostly so that the parse function could assume
that everything was initially zero.
However, various back-end functions pass around SCHED_CONFIG&
as an argument (also named "config").
This creates a shadow, which is always bad.
Worse is the possibility that some projects have back-end programs
that have a SCHED_CONFIG variable that's automatic,
and therefore isn't zero initially,
and therefore isn't parsing correctly.
To fix this, I changed the 2 vectors in SCHED_CONFIG into pointers,
and have the parse routine zero the structure.
I was tempted to remove the SCHED_CONFIG& args to back-end functions,
but this would have broken some projects' code.
I did, however, change the name from config to config_loc
to avoid shadowing.
Also fixed various other compiler warnings.
svn path=/trunk/boinc/; revision=15541
- change ERR_CHILD_FAILED TO EXIT_CHILD_FAILED
(it's an exit code, not a function error code)
- client: reduce severity of benchmark error
- scheduler: compile fix
svn path=/trunk/boinc/; revision=15423
added client/scripts to default client build
removed sea from the default clientgui build
added locale/client to the default clientgui build
moved installed headers from $(includedir) to $(pkgincludedir) which
is $(includedir)/boinc by default.
removed redefinitions of $(includedir) from Makefiles.
- configure:
added locale/client/Makefile to AC_CONFIG_FILES
svn path=/trunk/boinc/; revision=15300
for getting info on EDF simulation;
change output from seconds to hours
- API: remove extern "C" from graphics API
(convince me it's needed before restoring)
svn path=/trunk/boinc/; revision=15148
- Fixed bug in x_opengl.C. On systems where putenv() adds the string to
the environment rather than copies it, the environment would end up
containing a random peice of the stack where the DISPLAY variable had
been temporarily stored.
svn path=/trunk/boinc/; revision=15134
- configure script:
- Added checks for functions strdup(), strdupa(),
daemon(), stat64(), strcasestr()
- Fixed problems with kc_mysql.m4 and wxWidgets.m4 returning
invalid CFLAGS and LIBS flags.
- Fixed incorrect order of pthread flag checking on solaris.
- New files: lib/unix_util.[Ch]. Currently contains implementation of
daemon() for systems that lack it.
- Access to binary files in /proc was failing on some systems when compiled
with 64 bit file access. Rearranged headers and defines to force 32bit
file access in hostinfo_unix.C
- all_tty_idle() didn't work as advertised on any system as far as I can
tell. I rewrote it to check ttys that are not named /dev/tty[1-9].
The old implementation was modifying a statically allocated read-only
string, (and crashing on some systems) anyway.
- added implementation of non-standard function strcasestr() to str_util.C
- added #define of MAP_FILE to shmem.C, because it is missing from most
unix systems, (and is unnecessary on linux anyway).
- other minor bug fixes.
svn path=/trunk/boinc/; revision=14996
- update_versions: use __ (not :) as separator for plan class
- client: add plan_class to APP_VERSION;
an app version is now identified by platform/version/plan_class
- client CPU scheduler: don't assume apps use 1 CPU
- client: add avg_ncpus, max_cpus, flops, cmdline to RESULT
- scheduler: implement app planning scheme
Other changes:
- client: if symlink() fails, make a XML soft link instead
(for Unix running off a FAT32 FS)
- client: don't accept nonpositive resource share from AMS
- daemons and DB: check for error returns from enumerations,
and exit if so. Thus, if the MySQL server goes down,
all the daemons will soon exit.
The cron script will restart them every 5 min,
so when the DB server comes back up so will the project.
- web: show empty max CPU % as ---
- API: get rid of all_threads_cpu_time option (always the case now)
svn path=/trunk/boinc/; revision=14966
returns an ERROR_ACCESS_DENIED error code fallback
to the original shmem_name.
api/
graphics2_util.C
lib/
shmem.C
svn path=/trunk/boinc/; revision=14911
graphics applications so that the memory can be shared across terminal
server sessions.
- API: Add some trace messages to window creation and shutdown events, it
is all logged to stderr.
- API: Add some trace messages for loading graphic files.
- API: Add some trace messages for loading font files.
- API: There can be only one hInstance and it is assigned to the app at
startup via winmain(). Use it throughout the graphics2 impl.
- CC: Use the service security token to startup worker applications.
- MGR: Use the interactive security token to startup graphics
applications.
- LIB: Create two different logon methods, one for logging on interactively
(graphics applications) and one for services (worker application).
api/
graphics2_util.C
graphics2_win.C
gutil.C
txf_util.C
client/
app_start.C
lib/
proc_control.C, .h
win_build/
boincmgr_curl.vcproj
svn path=/trunk/boinc/; revision=14905
The design has been changed to constant #threads per app version
Various changes from Kevin Reed/WCG:
- server: add workunit.rsc_bandwidth_bound: if nonzero,
send this WU only to hosts with that much download bandwidth
- assimilators: if a handler returns DEFER_ASSIMILATION,
the WU remains in INIT state and will be handled when the
next instance completes.
Useful if you want the assimilator to see all instances.
- scheduler: when setting result.outcome = DETACHED,
set received_time to now
- scheduler: removed the reliable_time and reliable_min_avg_credit
options
- scheduler/web: add optional <allow_non_preferred_projects>
in project preferences.
If present, user will accept work from non-selected apps
if no work is available for selected apps
- scheduler: improved messages for projects with multiple apps
- scheduler: added config options
<granted_credit_weight> and <granted_credit_ramp_up>.
Used in calculating host.claimed_credit_per_cpu_sec,
but I'm not sure how.
- Added two new credit-granting formulas (validate_util.C):
stddev_credit() and two_credit()
- server DB: add rollback_transaction() and affected_rows() to DB_CONN
NOTE: DB update required
svn path=/trunk/boinc/; revision=14870
Lets you assign a WU to a particular host,
to one or all hosts belonging to a user or team, or to all hosts.
See http://boinc.berkeley.edu/trac/wiki/AssignedWork
Disabled unless you include <enable_assignment> in config.xml
Uses a new DB table.
Tested but only a little.
- Server: code cleanup; moved result-handling to a new file,
and removed the PLATFORM_LIST arg to everything
(put it in SCHEDULER_REQUEST instead)
svn path=/trunk/boinc/; revision=14767
This is for debugging apps (currently works only in Unix).
What it does: when running an app,
the client does everything except actually fork/exec the app,
i.e. it sets up the slot dir, creates shared mem segment etc.
It then continues as if the app were actually running,
and you can then manually run your app under a debugger
in the slot directory.
Note: the client won't notice the termination of your app.
- API, Unix: in situations where the timer thread wants to exit
(e.g. it notices a missing heartbeat).
don't directly call boinc_exit(),
since this touches data structures that the worker thread
may be using concurrently.
Instead, set a flag telling the worker thread to call boinc_exit()
(which it will do from its signal handler)
This is an attempt to fix problems reported by Bernd;
I haven't tested it.
- scheduler: add config flag for uploading usage data
- web: show account key and weak account key on user page
- added some code for multithread support (not finished)
api/
boinc_api.C
svn path=/trunk/boinc/; revision=14542
This was because SIGALRM always interrupts sleep()
and keeps boinc_sleep() stuck in its while loop.
Solution: change boinc_sleep() so that it works even if
rapid signals (e.g. interval timer) are happening
- API: remove deprecated graphics files from Makefile.
Old-style graphics are no longer supported.
- web: add empty show_user_donations_private() to donations.inc
svn path=/trunk/boinc/; revision=14513
Previously it was called from both timer and worker thread,
with no synchronization. Bad.
boinc_finish(): sleep for 2 seconds, enough to ensure that
the timer thread sends the final messages.
- API: a compile flag GETRUSAGE_IN_TIMER_THREAD selects
how to get CPU time; by default set only for Mac OS X
- scheduler: cap #CPUs scaling for <max_wus_per_host> at 8
svn path=/trunk/boinc/; revision=14495
(since calling it from worker thread causes crashes).
On Linux, call getrusage() from the worker thread
(since calling it from the timer thread returns zero on some systems).
- stripcharts: make it work even if Perl is not in path (from Eric Myers)
svn path=/trunk/boinc/; revision=14462
calls getrusage() in a signal handler to find its CPU time.
Apparently there are some kernels and/or thread libraries
where getrusage() does NOT return the total CPU time of
all threads in the process,
so in these cases calling it from the timer thread doesn't work.
This was originally changed because of concerns that
calling getrusage() in a signal handler was dangerous;
we'll see if any problems re-emerge.
The alternative of reading /proc/PID/stats doesn't seem viable;
format may not be standardized.
svn path=/trunk/boinc/; revision=14433
removed references to "graphics thread"
removed HANDLE timer_quit_event
removed enable_heartbeat/disable_heartbeat messages
(not sure what the ideas was, but no longer exists)
removed heartbeat_active flag (use options.check_heartbeat instead)
read heartbeat-channel messages even if heartbeat disabled
(since we use that channel for WSS messages too)
- client: remove ACTIVE_TASK::thread_handle (not used)
svn path=/trunk/boinc/; revision=14323
this limits the length of the generated string
~12 chars even for big/small numbers.
Also reduce buffer size from 8000 to 256;
default thread stack size might not accommodate 8000 + extra.
svn path=/trunk/boinc/; revision=14112
- changed Private Messages interface so that you see
all your messages on one page,
and remove various redundant links
(like the Inbox link on the Inbox page)
- changed links to buttons for moderator functions
svn path=/trunk/boinc/; revision=14019
use strlcat() instead of strcat().
Einstein@home has seen some SEGVs in this function.
I suspect that it's getting 1e304-type values
(why? possible bugs in getrusage-related code, still)
and that these cause long strings that overflow the message buffer.
svn path=/trunk/boinc/; revision=13999
not the worker signal handler.
There's no reason to call it from the signal handler -
it returns the CPU for the entire process, not the calling thread.
And it may be asynch-signal-handler-unsafe.
- API: comment out checks for bad CPU times.
I don't think this is needed now, and in some cases it's wrong
(multi-threaded apps can accumulate CPU faster than real time)
- API, Unix: in boinc_calling_thread_cpu_time(), don't retry getrusage().
- Bossa: switch to better class structure (suggested by Nicolas Alvarez).
Haven't switched to mysqli yet, but will later.
Also various other Bossa fixes
svn path=/trunk/boinc/; revision=13855
- check for infinity/NaN
- check for CPU time decreasing
- check for CPU time increasing faster than real time
... and deal with each of these in a hopefully reasonable way
svn path=/trunk/boinc/; revision=13847
and access to worker_thread_ru.
This was being used in the worker signal handler,
which is bad because pthread_mutex_lock() can allocate memory.
I don't think this matters; at worst we might get
CPU times off by < 1 sec.
svn path=/trunk/boinc/; revision=13844
like source code and text files. I skipped to check most files in html/
and mac_*/ though.
- Added svn:executable to tools/watch_tcp because it has a shebang.
svn path=/trunk/boinc/; revision=13819
at most one regular and one full-screen graphics window can be open,
and a "hide" message kills the full-screen window if one exists,
else a regular window.
Keep track of the PIDs separately for regular and full-screen.
Also, don't send a "hide" ack if we don't do graphics.
svn path=/trunk/boinc/; revision=13697
in a V6 app (and launching/killing the graphics app)
- API: start timer thread even if in standalone mode
(needed to get timer callbacks for V6 graphics)
- API: remove BOINCSetForegroundWindow stuff
- API: call DestroyWindow instead of boinc_exit() in WM_CLOSE.
boinc_exit() is the wrong thing to call - e.g. it tries to delete
the lock file, resulting in a 5-sec delay on exit
svn path=/trunk/boinc/; revision=13679
NOTE: as of this checkin, applications built with the API
code in the trunk are assumed to do V6-type graphics.
If your app doesn't, then you must set
backwards_compatible_graphics to false
(and use boinc_init_graphics_options())
svn path=/trunk/boinc/; revision=13675
(deciding which app to use, implementing blanking interval, etc.)
This logic is all now in the screensaver itself.
- GUI RPC: removed get/set screensaver mode RPCs
- API: added a "backwards_compatible_graphics" flag to BOINC_OPTIONS.
V6 apps should set this.
If set, the runtime library checks for graphics messages
from the client, and launches/kills the graphics app (if any).
The app will then work graphically with pre-V6 clients.
- removed some old files
svn path=/trunk/boinc/; revision=13651
update_versions to add version 6 apps.
It looks for API_VERSION string in main executable,
adds the API version to the app_version XML,
and sets min_core_version to 6 for version 6+ apps
- API: include API_VERSION string
- convert tabs to spaces here and there
- scheduler: parse unused elements in <net_stats>
- ops/show_log.php: if no URL args, just show form (fixes#415)
- client: parse and store api_version (not used yet)
svn path=/trunk/boinc/; revision=13627
process that's not running, at least mark it as preempted.
(this should never happen in principle)
- API: compile fix for Mac
api/
graphics2_unix.C
client/
cpu_sched.C
svn path=/trunk/boinc/; revision=12895
- API: Eric Myers reported that my 4 May checkin
(which increased worker thread stack size to the limit
returned by getrlimit())
broke his app on several Linux platforms.
So I added a worker_thread_stack_size element to BOINC_OPTIONS.
If you want an increased stack size, set this.
- web RPC: add <url> and <local_revision> elements to
the XML returned by get_project_config.php
html/user/
sample_get_project_config.php
api/
graphics_impl.C
svn path=/trunk/boinc/; revision=12664
- Fix a minor compile problem on 64-bit Windows platforms with the
call to SetTimer.
- fixes#80: Introduce the notion of an alternate platform for 64-bit
Windows clients, which can also run 32-bit Windows apps.
TODO: We'll need to refactor the whole platform section in the
scheduler request creation section so that it can handle
multiple alternate platforms and for Linux/Mac.
api/
windows_opengl.C
client/
client_state.C, .h
cpp.h
cs_scheduler.C
svn path=/trunk/boinc/; revision=12421